2016-04-04 17 views
1

Ist es sicher, eine std::shared_ptr an std::bind zu übergeben, wenn das Funktionsobjekt asynchron aufgerufen wird?std :: Bind Argument Kopierverhalten

I.E. Ist etwa die folgende Nummer sicher:

// Copy do not reference shared_ptr 
void someFunc(std::shared_ptr<Something> arg1,...other args...); 

std::shared_ptr<Something> data; // This may go out of scope before the functor below is called 
auto myFuture = QtConcurrent::run(std::bind(&someFunc,data,...other args...)); // In this case using QT but could be anything else 

Ich denke, dass als std::bind seine Argumente durch Bezugnahme nimmt und die oben nicht sicher sein wird, wollen aber bestätigen.

Für die Platte, die ich zwei Compiler bin mit:

  1. Klirren 7 (OS X)
  2. VC++ 12.0 (IE Visual Studio 2013)
+0

Warum spielt es eine Rolle, wie 'std :: bind' seine Argumente annimmt? Was zählt, ist, ob es eine Kopie von ihnen in die Sache bringt, die es zurückgibt, anstatt wie es sie braucht. –

+0

Guter Punkt. Das war eine schlechte Formulierung in meinem Namen. Was mich beunruhigte, ist, ob eine Kopie oder eine Referenz von dem zurückgegebenen Funktor, der T.C. hat schön unten geantwortet. –

Antwort

3

Die Objektfunktion von std::bind speichert zurück Kopien der gebundenen Argumente, so dass Ihr Code sicher ist, solange die Lebensdauer von data betroffen ist.

Verwandte Themen