pm1*_*100 5 c++ boost shared-ptr
我有两个有父子关系的类(客户和订单目录及文件等)
我有
typedef boost::shared_ptr<Parent> ParentPtr
Run Code Online (Sandbox Code Playgroud)
在父类中,有一个制作孩子的方法
我需要子实例来指向其父级.
class Child
{
....
ParentPtr m_parent;
....
}
Run Code Online (Sandbox Code Playgroud)
我希望它是一个shared_ptr,以便在存在子节点时父节点不会消失.我还有其他人将ParentPtrs保存到父级(Parent的工厂方法返回ParentPtr)
问题:如何给孩子一个ParentPtr
尝试(1).在Parent :: ChildFactory中
child->m_parent.reset(this);
Run Code Online (Sandbox Code Playgroud)
这导致非常糟糕的事情.现在有2个ParentPtr'链'指向父母; 结果是父母过早死亡
尝试(2).父母有
ParentPtr m_me;
Run Code Online (Sandbox Code Playgroud)
这是从父工厂的返回值复制的.所以我能做到
child->m_parent = m_me;
Run Code Online (Sandbox Code Playgroud)
但是现在Parent永远不会死,因为它拥有对自身的引用
我很确定能enable_shared_from_this解决您的问题:http://live.boost.org/doc/libs/1_43_0/libs/smart_ptr/enable_shared_from_this.html
如果从特化中派生出类,boost::enable_shared_from_this则可以shared_from_this()在成员函数中使用以获取拥有的共享指针this(假设有一个).
例如
class Parent : public boost::enable_shared_from_this<Parent>
{
void MakeParentOf(Child& c)
{
c.m_parent = shared_from_this();
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
820 次 |
| 最近记录: |