2015-07-15 2 views
1

Herb Sutter в GotW #91 Solution: Smart Pointer Parameters утверждает: « Благодаря структурированному времени жизни время жизни вызываемой функции является строгим подмножеством выражения вызова вызывающей функции». Это относится к асинхронным вызовам функций?Аргумент времени жизни вызова асинхронной функции

void myFunc(Bar * arg); 
... 
auto bar = new Bar; 
std::thread t1(myFunc,bar); 
delete bar; 
join t1; 

Я полагаю, что в этом случае, удаление бара может привести к аннулированию аргумента, передаваемый в MyFunc на нить t1.

+1

В C++ нет асинхронных вызовов функций. Нити не являются функциями, они являются объектами. –

ответ

2

1) Здесь вы передаете указатель в CTOR из t1 так все структурированные заявления, связанные с lieftime применяются только к указателю, а не объект, который он указывает.

2) Здесь нет асинхронных вызовов функций - вы вызываете std::thread ctor, и все структурированные заявления о времени жизни относятся только к ctor, а не к его побочным эффектам, которые в конечном итоге вызовут myFunc.

Смежные вопросы