gpt4 book ai didi

c++ - Lambda函数引用指针销毁检测

转载 作者:行者123 更新时间:2023-11-30 04:20:31 25 4
gpt4 key购买 nike

我创建了一个 lambda 函数来在不同的线程中运行代码,或者只是稍后运行它,但 lambda 函数保留的对象可能会同时被删除。

在这种情况下,我如何才能检测到并不运行该函数?

例如

class A
{
public:
A(){}
virtual void test(){std::cout << m;}
int m;
};
int main()
{
A* a = new A();
std::function<void ()> function = [=]()->void
{
//if( pointer to 'a' still valid )
{
a->test();
}
};
delete a;
//or if( pointer to 'a' still valid )
function();

system("pause");
return 0;
}

或者也可以在执行 lambda 函数之前进行检测。

另一种想法是让对象“Runnable”保留 lambda 函数并将其注册到可以删除的对象。然后在析构函数中我会通知 Runnable 并阻止执行。

这会是个好方法吗?

最佳答案

你无法测试指针指向的对象是否已经被删除..

如果它已被删除,您的 test() 只会有未定义的行为。

关于c++ - Lambda函数引用指针销毁检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15234560/

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