Мне нужно сделать что-то подобное более часто:
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.