如何检查类的“this”指针在回调函数中是否仍然有效?

问题描述 投票:0回答:1
class myClass
{
public:
    void fun()
    {
         async_do( [this](int j)
                        {
                            i+=j;
                        } );
    }

private:
    int i=9;
}

int main()
{
    std::shared_ptr<myClass> obj = std::make_shared<myClass>();
    obj->fun();
    obj->reset();
    return 0;
}

上面的代码,当我们调用

fun()
时,它会调用
async_do()
async_do()
会立即返回。当异步操作完成时,将调用 lambda 函数。但是,当该异步操作仍在运行时,该对象可能会被销毁。当调用 lambda 时,该对象不再存在。这种情况我应该在这个回调函数中做什么?
谢谢您的帮助。

c++ asynchronous lambda concurrency callback
1个回答
0
投票

weak_from_this
在这种情况下很有用。

当您需要创建回调但不知道

this
的生命周期时,这很有用。

示例:

class myClass: std::enable_shared_from_this<myClass>
{
public:
    void registerCallback()
    {
         SomeInstance::TakeCallback([weak_ref = weak_from_this() ](int j)
                {
                     auto strong_ref = weak_ref.lock();
                     if (nullptr == strong_ref) return;

                     // use `strong_ref` as `this`
                 });
    }

private:
    // ....
}
© www.soinside.com 2019 - 2024. All rights reserved.