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 时,该对象不再存在。这种情况我应该在这个回调函数中做什么?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:
// ....
}