gpt4 book ai didi

c++ - lambda通过this捕获成员变量

转载 作者:行者123 更新时间:2023-11-28 02:16:17 31 4
gpt4 key购买 nike

要捕获对象中的成员数据,lambda 需要捕获 'this' 指针:

class A {
public:
void func() {
auto f = [this](){_b->do_something();};
_c->run(f); // asynchronized method
}
private:
B* _b;
C* _c;
};

有一个问题:当f被_c调用时,A的对象可能会被销毁! _b->do_something(); 会变成未定义的行为吗?

最佳答案

使用 shared_ptr,然后在 lambda 中捕获它。现在,当您创建 A 的实例时,您需要使用 make_shared。最好是从 enable_shared_from_this 继承,然后可以在 lambda 捕获中使用 shared_from_this 来强制 A 保持足够长的时间,以便lambda 运行而无需在其他任何地方引用 shared_ptr

您类(class)的第一部分将如下所示:

class A : std::enable_shared_from_this<A> {
public:
void func() {
auto self = shared_from_this();
auto f = [this, self](){_b.do_something();};
_c->run(f); // asynchronized method
}

关于c++ - lambda通过this捕获成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33933297/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com