[英]Why does std::weak_ptr not have a move constructor or move assignment operator?
通過boost的weak_ptr的1.53標題,我驚訝地看到移動賦值和移動構造函數已經實現,即使它們沒有記錄。 從本文檔中 ,沒有任何要求std :: weak_ptr提供移動功能。
通過Visual Studio 2012的weak_ptr實現,我沒有注意到在weak_ptr中聲明了任何明顯的移動操作,盡管它們可能隱藏在繼承之后。 但是,此代碼導致監視窗口報告指針的一個共享引用和兩個弱引用,這使我相信weak_ptr未啟用移動:
std::shared_ptr<int> ptr(std::make_shared<int>(5));
std::weak_ptr<int> weakptr(ptr);
std::weak_ptr<int> movedWeakPtr(std::move(weakptr));
是否有充分的理由說std :: weak_ptr不提供移動功能? 如果沒有,weak_ptr應該被視為可移動類型嗎?
根據定義 ,每個可復制的類型都是可移動的。 weak_ptr
是可復制的,因此它是可移動的。
weak_ptr
可以有一個移動構造函數。 但它只適用於相對較小的優化。 這可能是標准委員會的疏忽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.