的,我需要做這樣的事情往往比更多的元件組合:如何使用的std ::綁定的std :: shared_ptr的
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
,即該異步任務的結束。
編輯:我不總是有權訪問std :: thread,線程庫可以是boost :: thread甚至任何其他平臺相關的線程。結果,不能訪問std :: async。
我的主要問題是在std :: bind中擁有一個佔有的概念。
您是否嘗試過使用'的std :: shared_ptr'?看起來編譯沒有問題:http://liveworkspace.org/code/1e83d9698703711b7ed2ce0d44cf86f2 – PiotrNycz
你需要知道的是,'std :: bind'按值存儲綁定參數(即,如傳遞),因此,如果你通過擁有指針通過值作爲參數之一,該指針被「複製」到所產生的仿函數中,因此,即使在原始的「shared_ptr」超出範圍之後仍保留所有權。 – haelix