c – 为什么不std :: weak_ptr <>提供一个bool转换?

C 11的std :: shared_ptr<>提供了一种布尔运算符。

operator unspecified-bool-type() const;

(由于dangers from implicit casting类型为bool,它不是一个直线操作符bool()const)

为什么不std :: weak_ptr<>有类似的运算符?我发现自己不断打字

if( !wp.expired() )

当我想输入

if( wp )

为什么没有bool转换为weak_ptr?

如果(!wp.expired())在多线程代码中几乎总是错误的检查,因为直接在if语句后指针可能会过期。因此,如果weak_ptr与bool转换的语义完全相同,那么它绝对不会被使用。

如果要检查指针是否存在,请使用锁定并检查获取的shared_ptr。

如果您想知道指针是否死亡,请使用过期。

你可以看到,提供一个布尔转换是没有意义的。对于shared_ptr,它完全可以。 Btw,转换运算符是显式运算符bool()const noexcept;在C 11。

http://stackoverflow.com/questions/10283007/why-doesnt-stdweak-ptr-provide-a-bool-conversion

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 为什么不std :: weak_ptr <>提供一个bool转换?