Мне нужно сделать что-то подобное более часто:
AsyncOperation * pAsyncOperation = new AsyncOperation();
auto bindOperation = std::bind(&AsyncOperation::operator(), std::ref(*pAsyncOperation));
std::thread thread(bindOperation );
thread.join();
с AsyncOperation - любой пользовательский класс, реализующий operator() (также известный как функтор или объект функции).
Можно ли указать std::bind использовать std::shared_ptr вместо std::ref?
Это предотвратит утечку памяти, без необходимости сохранять ссылку на pAsyncOperation, и автоматически удалит AsyncOperation в конце потока, что является завершением этой асинхронной задачи.
EDIT: у меня не всегда есть доступ к std:: thread, потоковая библиотека может быть boost:: thread или даже любыми другими зависимыми от платформы потоками. И, следовательно, не доступ к std:: async.
Моя основная проблема заключается в том, чтобы иметь представление о владении в std:: bind.