编程语言
首页 > 编程语言> > 我如何在C中的应用程序上共享“this”实例?

我如何在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