0

假设我有:

void f()
{
    SomeClass someObject;
    pplx::create_task([&]()-> SomeClass { return someObject; });
}

void g()
{
    //Allocate automatic objects
}

int main()
{
    f();
    g();
}

这能保证工作吗?我的逻辑说不,因为到任务运行时someObject可能超出范围。

4

1 回答 1

1

这取决于。如果在返回后从未​​使用过 lambda(或其副本)f(),那么一切都很好。之后当然return someObject是评估对不再存在的对象的引用,这是未定义的行为。

于 2014-08-25T12:57:35.757 回答