簡體   English   中英

為什么std :: weak_ptr <>不提供bool轉換?

[英]Why doesn't std::weak_ptr<> provide a bool conversion?

C ++ 11的std :: shared_ptr <>提供了一種bool運算符。

operator unspecified-bool-type() const;

(由於bool類型的隱式轉換危險,它不是一個直接operator bool() const 。)

為什么std :: weak_ptr <>沒有類似的運算符? 我發現自己經常打字

if( !wp.expired() )

當我想打字的時候

if( wp )

為什么沒有針對weak_ptr的bool轉換?

if(!wp.expired())在多線程代碼中幾乎總是一個錯誤的檢查,因為在if語句之后直接指針可能會到期。 因此,如果weak_ptrbool轉換的語義完全相同,那么它永遠不會被使用。

如果要檢查指針是否處於活動狀態,請使用lock並檢查獲取的shared_ptr

如果您想知道指針是否已死,請使用expired

如您所見,提供布爾轉換沒有意義。 對於shared_ptr ,它完全可以。 順便說一下,轉換運算符是explicit operator bool() const noexcept; 在C ++ 11中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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