假设我有:
void f()
{
SomeClass someObject;
pplx::create_task([&]()-> SomeClass { return someObject; });
}
void g()
{
//Allocate automatic objects
}
int main()
{
f();
g();
}
这可以保证有效吗?我的逻辑说不,因为当任务运行时someObject
可能超出范围。
答案 0 :(得分:1)
这取决于。如果在f()
返回后从未使用lambda(或其副本),一切都很好。之后当然return someObject
正在评估对不再存在的对象的引用,这是未定义的行为。