Old*_*ier 21 c++ shared-ptr weak-ptr c++11
C++ 11的std :: shared_ptr <>提供了一种bool运算符.
operator unspecified-bool-type() const;
Run Code Online (Sandbox Code Playgroud)
(operator bool() const由于类型的隐式转换带来的危险,这不是直接的bool.)
为什么std :: weak_ptr <>没有类似的运算符?我发现自己经常打字
if( !wp.expired() )
Run Code Online (Sandbox Code Playgroud)
当我想打字的时候
if( wp )
Run Code Online (Sandbox Code Playgroud)
为什么没有针对weak_ptr的bool转换?
Xeo*_*Xeo 29
if(!wp.expired())在多线程代码中几乎总是错误的检查,因为在该if语句之后直接指针可能会到期.因此,如果weak_ptr将其作为bool转换的语义,那么它永远不会被使用.
如果要检查指针是否处于活动状态,请使用lock并检查获得的指针shared_ptr.
如果您想知道指针是否已死,请使用expired.
如您所见,提供布尔转换没有意义.因为shared_ptr,它完全是.顺便说一句,转换运算符explicit operator bool() const noexcept;在C++ 11中.
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |