C++11’s std::shared_ptr<> provides a kind of bool operator.
operator unspecified-bool-type() const;
(It’s not a straight-up operator bool() const due to the dangers from implicit casting of type bool.)
Why doesn’t std::weak_ptr<> have a similar operator? I find myself constantly typing
if( !wp.expired() )
when I want to type
if( wp )
Why no bool conversion for weak_ptr?
if(!wp.expired())is almost always a wrong check in multithreaded code, because directly after thatifstatement the pointer could expire. As such, ifweak_ptrhad exactly that as the semantics for theboolconversion, it would never be used anyways.If you want to check if the pointer is alive, use
lockand check the obtainedshared_ptr.If you want to know if the pointer is dead, use
expired.As you can see, it just doesn’t make sense to provide a boolean conversion. For
shared_ptr, it totally does. Btw, the conversion operator isexplicit operator bool() const noexcept;in C++11.