从cpprest lambda表达式访问自动变量

时间:2014-08-25 12:45:45

标签: c++ c++11 lambda casablanca

假设我有:

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

void g()
{
    //Allocate automatic objects
}

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

这可以保证有效吗?我的逻辑说不,因为当任务运行时someObject可能超出范围。

1 个答案:

答案 0 :(得分:1)

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

相关问题