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:
- Klirren 7 (OS X)
- VC++ 12.0 (IE Visual Studio 2013)
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. –
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. –