Метод expired
Метод expired класса weak_ptr проверяет,
был ли удален объект, на который ссылается данный
weak_ptr. Метод не принимает параметров и
возвращает true, если объект уже удален,
и false, если объект еще существует.
Метод удобно использовать перед вызовом метода
lock, чтобы убедиться, что объект
еще доступен.
Синтаксис
weak_ptr.expired()
Пример
Давайте создадим shared_ptr и связанный с ним
weak_ptr, а затем проверим с помощью метода
expired, существует ли еще объект:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
shared_ptr<int> sp = make_shared<int>(42);
weak_ptr<int> wp = sp;
cout << wp.expired() << endl;
sp.reset();
cout << wp.expired() << endl;
return 0;
}
Результат выполнения кода:
0
1
Пример
Давайте проверим состояние weak_ptr перед
вызовом метода lock, чтобы безопасно
получить доступ к объекту:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
shared_ptr<int> sp = make_shared<int>(10);
weak_ptr<int> wp = sp;
if (!wp.expired()) {
shared_ptr<int> locked = wp.lock();
cout << *locked << endl;
} else {
cout << "expired" << endl;
}
sp.reset();
if (!wp.expired()) {
shared_ptr<int> locked = wp.lock();
cout << *locked << endl;
} else {
cout << "expired" << endl;
}
return 0;
}
Результат выполнения кода:
10
"expired"