在C++ 11
&以上什麼優點或缺點存儲一std::thread
直接像這樣類的成員時:存儲在C++ 11智能指針一個std ::螺紋
std::thread my_thread;
與之相對到存儲std::shared_ptr
或std::unique_ptr
到線程像這樣:
std::shared_ptr<std::thread> my_thread_ptr;
是任意的代碼選項優於其他?或者,這並不重要,只需2種不同的方式來處理線程對象。
在C++ 11
&以上什麼優點或缺點存儲一std::thread
直接像這樣類的成員時:存儲在C++ 11智能指針一個std ::螺紋
std::thread my_thread;
與之相對到存儲std::shared_ptr
或std::unique_ptr
到線程像這樣:
std::shared_ptr<std::thread> my_thread_ptr;
是任意的代碼選項優於其他?或者,這並不重要,只需2種不同的方式來處理線程對象。
可能存在的指針(或智能指針)成員的用法一些不常見的原因,但常見的用法似乎std::thread
要麼不適用或具有足夠的靈活性本身:
std::thread
已經支持它。它可以在「不表示線程」狀態下創建,稍後在需要時分配真實線程,並且可以提前編輯。std::thread
已經支持移動和交換,所以不需要指針。std::thread
沒有任何虛擬成員函數。std::thread
是標準庫類,所以我們不能使它變得不透明。所以我們應該直接使用它作爲數據成員。
共享所有權是我現在可以提出的唯一用例 –
如果您有將std :: thread作爲成員變量的選項,那就去做吧。如果不是,請考慮其他選項。除非您有充分理由這樣做,否則請勿將其包裹在std::shared_ptr
或std::unique_ptr
之內。鑑於std::thread
本身是可移動的,所以很不可能將它包裝到智能指針中。
你知道嗎,不是優點還是缺點?看看線程的特殊成員函數做了什麼,然後決定這是否是你想要的外部類的行爲。 –
爲什麼你將它存儲在'std :: shared_ptr'或'std :: unique_ptr'中?我沒有看到這一點,'std :: thread'只是包裝實現定義的線程句柄。 – Akira
這似乎是一個列表問題。而是問一些關於特定案例的具體問題並解釋你的約束。 –