簡體   English   中英

為什么std :: weak_ptr沒有移動構造函數或移動賦值運算符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM