I need to do something like this more than often:
AsyncOperation * pAsyncOperation = new AsyncOperation();
auto bindOperation = std::bind(&AsyncOperation::operator(), std::ref(*pAsyncOperation));
std::thread thread(bindOperation );
thread.join();
with AsyncOperation
being any custom class implementing operator()
(also known as function object).
Is it possible to indicate to the std::bind
to use a std::shared_ptr
instead of a std::ref
?
This would prevent memory leaks, without my needing to keep a reference on pAsyncOperation
, and would delete the AsyncOperation
automatically at the end of the thread, that is the end of this asynchronous task.
EDIT: I don't always have access to std::thread, the thread library can be boost::thread or even any other platform dependent threads. And by consequence, not access to std::async.
My main issue is to have a notion of ownership in the std::bind.