C ++ 11的std :: shared_ptr<>提供了一种bool算子。
operator unspecified-bool-type() const;
(由于operator bool() const
类型为dangers from implicit casting,因此不是直接bool
。)
为什么不std :: weak_ptr<>有一个类似的运营商?我发现自己经常打字
if( !wp.expired() )
当我想输入
时if( wp )
为什么没有针对weak_ptr的bool转换?
答案 0 :(得分:29)
if(!wp.expired())
在多线程代码中几乎总是错误的检查,因为在if
语句之后,指针可能会到期。因此,如果weak_ptr
与bool
转换的语义完全相同,那么它永远不会被使用。
如果要检查指针是否处于活动状态,请使用lock
并检查获得的shared_ptr
。
如果您想知道指针是否已死,请使用expired
。
如您所见,提供布尔转换没有意义。对于shared_ptr
,它完全可以。顺便说一句,转换运算符在C ++ 11中是explicit operator bool() const noexcept;
。