【发布时间】:2017-04-16 14:51:42
【问题描述】:
我知道我是否必须在 lambda 中调用成员函数以进行回调,我在 lambda 中捕获了它并且它运行良好。 但是我最近看到了一些崩溃,似乎在 this 指向的对象已经被破坏之后访问了成员函数。 简而言之,关闭时对象被销毁,但指针在 lambda 中传递,被访问并导致崩溃。
所以,我试图了解社区在这种情况下通常会做什么。我找不到太多,但我认为 shared_ptr 可能是一个选项。
任何建议/线索将不胜感激,以帮助我理解和实施替代方案。
【问题讨论】:
-
能发个sn-p代码吗?
-
您可以从
std::enable_shared_from_this继承,使用shared_from_this()获取共享指针并捕获std::shared_ptr,如果您想确保对象还活着,或者std::weak_ptr,如果你想在做任何操作之前检查它是否还活着。 -
我将统一@TheEyesightDim。我们可以得到minimal reproducible example 吗?
-
[self = *this]() { self.f(); }? -
@KerrekSB 在这种情况下,您必须保证该类具有正确的构造函数。并非总是如此。当然,您也不一定可以将其修改为从
std::enable_shared_from_this继承。
标签: c++ c++11 lambda this shared-ptr