2015-07-15 1 views
1

Herb Sutter dans GotW #91 Solution: Smart Pointer Parameters indique " Grâce aux durées de vie structurées, la durée de vie de la fonction appelée est un sous-ensemble strict de l'expression d'appel de la fonction appelante." Est-ce que cela s'applique aux appels de fonction asynchrones?Durée de vie d'un appel de fonction asynchrone

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

Je présume que dans ce cas, une barre de suppression pourrait invalider l'argument passé dans myFunc sur le thread t1.

+1

Il n'y a pas d'appel de fonction asynchrone en C++. Les threads ne sont pas des fonctions, ce sont des objets. –

Répondre

2

1) Ici vous passez un pointeur dans le cteur de t1 de sorte que tous les lieftime structurés liés à des déclarations ne concernent que le pointeur plutôt que l'objet il pointe.

2) Il n'y a pas d'appel de fonction asynchrone ici - vous appelez un std::thread ctor et toutes les instructions de durée de vie structurée s'appliquent au ctor uniquement plutôt qu'à ses effets secondaires qui finiront par appeler myFunc.