我如何在C中的应用程序上共享“this”实例?
作者:互联网
说我有:
class Foo
{
public:
Foo(std::function< void(std::shared_ptr< Foo >) > callback);
void shareMyFoo()
{
callback(std::make_shared< Foo >(this));
}
....
};
调用shareMyFoo()时,某人将有机会复制共享指针.不幸的是,因为它会死 – 也就是说,它的参考计数器降到0–它会杀死我的Foo.我想防止Foo被杀.
我想过有一个字段std :: shared_ptr< Foo>在Foo中sharedSelf_,我会在构造函数中初始化,但这也很便宜.
更一般地说,假设我实例化并存储指向共享指针中对象的指针(例如,auto foo = std :: make_shared< Foo>()),稍后实例想要将自身作为共享指针传递.如何在全球范围内更新ref计数器?
注: :我想/需要在我的应用程序上保留我的签名/我的shared_ptr参数.
解决方法:
您必须继承自std :: enable_shared_from_this(n3242§20.7.2.4).
auto p = (new Foo) -> shared_from_this ();
标签:c,shared-ptr 来源: https://codeday.me/bug/20190826/1731294.html