在Swift编程语言中,通常通过弱引用将self
传递给闭包,例如:
self.someAsyncFunction(param1, param2, { [weak self] in
self?.doSomething()
})
我觉得很方便。
C ++中有类似的东西吗?例如:
this->someAsyncFunction(param1, param2, [this](){
this->doSomething();
});
在执行lambda的那一刻,调用者的实例(或this
)可能已被删除。结果,它在this->doSomething()
上崩溃了。
换句话说,我想要这样的东西:
this->someAsyncFunction(param1, param2, [weak this](){
if (this)
this->doSomething();
});
这当然不是有效的C ++代码。
在处理此类问题上是否有好的做法?
理想情况下,解决方案必须处理所有可能的结果,例如
this
由new
创建,并由delete
删除。this
的生存期由std::shared_ptr
控制。this
的生存期由boost::intrusive_ptr
控制。