【发布时间】:2023-03-03 10:26:01
【问题描述】:
我有两个具有父子关系的类(客户&订单目录&文件等)
我有
typedef boost::shared_ptr<Parent> ParentPtr
在父类中创建子类的方法
我需要子实例具有指向其父实例的指针。
class Child
{
....
ParentPtr m_parent;
....
}
我希望它是一个 shared_ptr,这样当有现有的孩子时,父母就不会消失。我也有其他人持有 ParentPtrs 给父母(父母的工厂方法返回一个 ParentPtr)
问题:如何给孩子一个ParentPtr
尝试 (1) 。在 Parent::ChildFactory
child->m_parent.reset(this);
这会导致非常糟糕的事情。现在有 2 个 ParentPtr 'chains' 指向父级;结果是父母过早死亡
尝试 (2)。父母有
ParentPtr m_me;
从父工厂的返回值复制而来。所以我可以做
child->m_parent = m_me;
但现在 Parent 永远不会死,因为它拥有对自身的引用
【问题讨论】:
标签: c++ boost shared-ptr