Skip to main content

std::weak_ptr<T>::expired

Since C++11
bool expired() const noexcept;

Equivalent to use_count() == 0. The destructor for the managed object may not yet have been called, but this object's destruction is imminent (or may have already happened).

Parameters

(none))

Return value

true if the managed object has already been deleted, false otherwise.

Notes

This function is inherently racy if the managed object is shared among threads. In particular, a false result may become stale before it can be used. A true result is reliable.

Example

Demonstrates how expired is used to check validity of the pointer.

#include <iostream>
#include <memory>

std::weak_ptr<int> gw;

void f()
{
if (!gw.expired()) {
std::cout << "gw is valid\n";
}
else {
std::cout << "gw is expired\n";
}
}

int main()
{
{
auto sp = std::make_shared<int>(42);
gw = sp;

f();
}

f();
}
Result
gw is valid
gw is expired

std::weak_ptr<T>::expired

Since C++11
bool expired() const noexcept;

Equivalent to use_count() == 0. The destructor for the managed object may not yet have been called, but this object's destruction is imminent (or may have already happened).

Parameters

(none))

Return value

true if the managed object has already been deleted, false otherwise.

Notes

This function is inherently racy if the managed object is shared among threads. In particular, a false result may become stale before it can be used. A true result is reliable.

Example

Demonstrates how expired is used to check validity of the pointer.

#include <iostream>
#include <memory>

std::weak_ptr<int> gw;

void f()
{
if (!gw.expired()) {
std::cout << "gw is valid\n";
}
else {
std::cout << "gw is expired\n";
}
}

int main()
{
{
auto sp = std::make_shared<int>(42);
gw = sp;

f();
}

f();
}
Result
gw is valid
gw is expired