下面是我想要做的一个抽象。主函数依次调用f1和f2。在F1,构建一个局部变量吨,然后调用与吨,其中回调捕获的吨 const引用无阻塞功能。在执行回调之前,f1可能已经返回,t被销毁。我认为在这种情况下,回调在被调用时将保持无效的t。我写了一个测试来模拟f2在执行回调之前完成的情况。看起来很好。我误解了任何有关C++的内容吗?C++可变生命时间
void Main() {
f1();
f2();
}
void f1() {
T t(...);
nonBlocking(t, Closure(callback, t));
}
void callback(const T& t) {
// do something with t
}
struct T {
int* a;
string* b;
...
}
也许代码* happend *工作正常。 – MikeCAT
我写了一个测试来模拟这种情况,其中f2在回调执行之前完成。看起来很好。 – Gaga
你真幸运。你是nonBlocking函数可能仍然看到“T”,因为没有其他东西覆盖它。 t上的析构函数在超出范围时运行。任何事情都可能发生在这一点上。 –