我有两个班,一个父子关系(客户&为了目录&文件等)升压shared_ptr的和“这个”
我
typedef boost::shared_ptr<Parent> ParentPtr
,并在父类中做出的方法孩子
我需要子实例指向其父。
class Child
{
....
ParentPtr m_parent;
....
}
我希望它是一个shared_ptr,以便在存在子项时父项不会消失。我也有其他人拿着ParentPtrs父(家长工厂方法返回一个ParentPtr)
问题:怎样才能给孩子一个ParentPtr
尝试(1)。 In Parent :: ChildFactory
child->m_parent.reset(this);
这会导致很糟糕的结果。现在有2个ParentPtr'连锁'指向父母;结果是父母过早死亡
尝试(2)。 Parent has
ParentPtr m_me;
它从Parent工厂的返回值中复制而来。所以我可以做
child->m_parent = m_me;
但现在家长永远不会死,因为它拥有自身
最佳答案 - 谢谢 – pm100 2010-07-12 18:07:22
@ pm100:为什么你需要使用'weak_ptr'?如果孩子拥有他们的父母(在他们之间共享),那么你需要使用'shared_ptr'。 “weak_ptr”并不意味着所有权。 – 2010-07-12 18:51:45
哦,你是对的 - 我正在考虑一个不同的解决方案 - 删除编辑 – pm100 2010-07-12 21:20:56