Question

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?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top