C++ 斯威夫特';s[弱自我]C+的替代方案+;
在Swift编程语言中,通常通过弱引用将C++ 斯威夫特';s[弱自我]C+的替代方案+;,c++,lambda,lifetime,C++,Lambda,Lifetime,在Swift编程语言中,通常通过弱引用将self传递到闭包中,例如: self.someAsyncFunction(param1, param2, { [weak self] in self?.doSomething() }) 对我来说这是一件非常方便的事情 C++中是否有相似之处?例如: this->someAsyncFunction(param1, param2, [this](){ this->doSomething(); }); 调用方的实例(或此)可能
self
传递到闭包中,例如:
self.someAsyncFunction(param1, param2, { [weak self] in
self?.doSomething()
})
对我来说这是一件非常方便的事情
C++中是否有相似之处?例如:
this->someAsyncFunction(param1, param2, [this](){
this->doSomething();
});
调用方的实例(或此
)可能在执行lambda时已被删除。结果,它在this->doSomething()
上崩溃。
换句话说,我想要这样的东西:
this->someAsyncFunction(param1, param2, [weak this](){
if (this)
this->doSomething();
});
当然不是C++代码,
处理此类问题是否有良好的做法 理想情况下,解决方案必须处理所有可能的问题,例如
由此
创建,并通过新建
删除删除
的生存期由此
控制std::shared\u ptr
的生存期由此
控制boost::intrusive_ptr
此
,则您的此
仍将是相同的此
,但使用此
将成为未定义的行为<代码>此不公平,但<代码> < <代码>是C++。因此,这里唯一需要探索的选项将涉及到智能指针。C++倾向于“除非你选择了设备(和开销),否则你不会为此付出代价。std::shared_ptr
和std::enable_shared_from_this
(由Sombrero Chicken链接)是您正在寻找的设施(和开销)。从架构的角度来看,我不喜欢我的对象自我意识到它们属于共享的\u ptr
。但是如果我真的需要它们,我会使用它。你能改变类(但是它的实例被管理)来支持这个用法吗?但是它需要一个<代码> SyddypTr>代码>。C++不是一个管理语言,所以<代码>这个< /C>永远是<代码>这个< /C>,而且它不会突然改变,意外地,而不是变成这个<代码>这是永远的。如果其他内容删除了此
,则您的此
仍将是相同的此
,但使用此
将成为未定义的行为<代码>此不公平,但<代码> < <代码>是C++。因此,这里唯一需要探索的选项将涉及到智能指针。C++倾向于“除非你选择了设备(和开销),否则你不会为此付出代价。std::shared_ptr
和std::enable_shared_from_this
(由Sombrero Chicken链接)是您正在寻找的设施(和开销)。从架构的角度来看,我不喜欢我的对象自我意识到它们属于共享的\u ptr
。但是如果我真的需要它们,我会使用它。你能改变类(不管它的实例是如何管理的)来支持这种用法吗?