У меня есть два класса с отношениями родитель-ребенок (клиент, каталог, файл и т. Д.)
У меня есть
typedef boost::shared_ptr<Parent> ParentPtr
и в родительском классе метод, чтобы сделать ребенка
Мне нужны дочерние экземпляры, чтобы указатели были на их родителей.
class Child
{
....
ParentPtr m_parent;
....
}
Я хочу, чтобы это был shared_ptr, чтобы родительский элемент не исчезал, пока есть существующие дочерние элементы. У меня также есть другие люди, которые держат ParentPtrs для родителя (фабричный метод для Parents возвращает ParentPtr)
Вопрос: как дать ребенку ParentPtr
попытка (1). In Parent :: ChildFactory
child->m_parent.reset(this);
это приводит к очень плохим вещам. Теперь есть 2 цепочки ParentPtr, указывающие на родителя; результатом является преждевременная смерть родителя
попытка (2). Родитель имеет
ParentPtr m_me;
, который копируется из возвращаемого значения родительской фабрики. Так что я могу сделать
child->m_parent = m_me;
Но теперь Родитель никогда не умирает, потому что содержит ссылку на себя