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 that if
statement the pointer could expire. As such, if weak_ptr
had exactly that as the semantics for the bool
conversion, it would never be used anyways.
If you want to check if the pointer is alive, use lock
and check the obtained shared_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 is explicit operator bool() const noexcept;
in C++11.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With