Предположим, у меня есть:
void f()
{
SomeClass someObject;
pplx::create_task([&]()-> SomeClass { return someObject; });
}
void g()
{
//Allocate automatic objects
}
int main()
{
f();
g();
}
Это гарантированно сработает? моя логика говорит нет, так как к тому времени, когда задача выполняется someObject
может быть вне области.
Это зависит. Если лямбда (или ее копия) никогда не используется после f()
возвращается, все хорошо. Потом конечно return someObject
оценивает ссылку на объект, который больше не существует, что является неопределенным поведением.