Продолжается мой процесс написания хеллоуворлдов на С++. Известно что многое было сделано в стандарте С++ 11 для того чтобы снизить вероятность ошибок, в том числе в работе с памятью. Хочу проконсультироваться с плюсовиками в плане организации кода.
Допустим есть обьект класса Mothership. В нем есть какие-то данные. Еще есть метод
std::unique_ptr<UFO> launch_ufo();
Он создает обьект и ним можно пользоваться. Mothership не имеет сcылок на UFO, он полностью отдал право пользования внешнему коду, на что часто намекает (но не гарантирует) std::unique_ptr. Но UFO скрыто пользуется частями экземпляра класса Mothership, который его создал. Если инстанс Mothership откинет копыта, то все UFO станут непригодными.
Пример не выдумал и вполне может иметь место с коллекцией и итератором.
Можно написать документацию и по хорошему попросить не уничтожать Mothership. Но можно ли сделать код дуракоустойчивым?
Как с академически правильной будет перерефакторить этот пример, чтобы избавиться от ошибок удаления Mothership раньше времени, чтобы не сломать уже созданные экземпляры UFO, если обязательным условием есть пользование обьектом Mothership из UFO.
Напрашивается что-то в стиле выделение общих частей Mothership и UFO в std::shared_ptr внутри Mothership. Еще идеи?