ho bisogno di fare qualcosa di simile più spesso:Come combinare l'uso di std :: bind con std :: shared_ptr
AsyncOperation * pAsyncOperation = new AsyncOperation();
auto bindOperation = std::bind(&AsyncOperation::operator(), std::ref(*pAsyncOperation));
std::thread thread(bindOperation);
thread.join();
con AsyncOperation
essere qualsiasi classe personalizzata attuazione operator()
(noto anche come functor o oggetto funzionale).
È possibile indicare a std::bind
l'utilizzo di std::shared_ptr
anziché std::ref
? Ciò eviterebbe perdite di memoria, senza la necessità di mantenere un riferimento su pAsyncOperation
e si eliminerebbe automaticamente il AsyncOperation
alla fine del thread, ovvero la fine di questa attività asincrona.
MODIFICA: Non sempre ho accesso a std :: thread, la libreria di thread può essere boost :: thread o anche qualsiasi altro thread dipendente dalla piattaforma. E di conseguenza, non accedere a std :: async.
Il mio problema principale è avere una nozione di possesso in std :: bind.
Hai provato ad usare 'std :: shared_ptr'? Sembra che compili senza problemi: http://liveworkspace.org/code/1e83d9698703711b7ed2ce0d44cf86f2 – PiotrNycz
Quello che devi sapere è che 'std :: bind' memorizza gli argomenti associati per valore (cioè, come passato), quindi, se passi un possesso puntatore per valore come uno dei parametri, quel puntatore viene "copiato" nel functor risultante, quindi, mantenendo la proprietà anche dopo che l'originale 'shared_ptr' esce dall'ambito. – haelix