shared_ptr模式拥有函数内的对象

时间:2014-03-04 18:28:50

标签: design-patterns c++11 shared-ptr

从成员函数中获取拥有shared_ptr有什么好的C ++ 设计模式

在我的函数中,我需要将shared_ptr存储到this并稍后检索 - 在另一个范围内。这种天真的方法不起作用:

void Foo::doSomething(shared_ptr<Bar> bar)
{
    bar->setFoo(make_shared<Foo>(this));
}

void Bar::setFoo(shared_ptr<Foo> foo)
{
    myFoo.reset(foo);
}

现在,如果我这样做

shared_ptr<Foo> foo(new Foo());
shared_ptr<Bar> bar(new Bar());
foo->doSomething(bar);

以后我无法知道bar->myFoo是否仍然有效。

问题是我正在为同一个shared_ptr实例创建第二个Foo。但是我无法从函数中访问shared_ptr,因为我只有this

(显然实际设置比这个简单的例子更复杂)

1 个答案:

答案 0 :(得分:4)