繁体   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