Swift的[弱自我]替代C ++

时间:2019-02-13 11:45:24

标签: c++ lambda lifetime

在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 ++代码。

在处理此类问题上是否有好的做法?

理想情况下,解决方案必须处理所有可能的结果,例如

  • thisnew创建,并由delete删除。
  • this的生存期由std::shared_ptr控制。
  • this的生存期由boost::intrusive_ptr控制。

0 个答案:

没有答案