跳到主要内容

std::weak_ptr<T>::expired

自 C++11 起
bool expired() const noexcept;

等同于 use_count() == 0。托管对象的析构函数可能尚未调用,但该对象的销毁即将发生(或可能已经发生)。

参数

(无))

返回值

如果托管对象已被删除,则返回 true,否则返回 false

备注

如果托管对象在线程之间共享,则此函数本质上是竞争性的。特别是,一个错误的结果在被使用之前可能会过时。一个正确的结果是可靠的。

示例

演示了如何使用 expired 来检查指针的有效性。

#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();
}
结果
gw is valid
gw is expired

std::weak_ptr<T>::expired

自 C++11 起
bool expired() const noexcept;

等同于 use_count() == 0。托管对象的析构函数可能尚未调用,但该对象的销毁即将发生(或可能已经发生)。

参数

(无))

返回值

如果托管对象已被删除,则返回 true,否则返回 false

备注

如果托管对象在线程之间共享,则此函数本质上是竞争性的。特别是,一个错误的结果在被使用之前可能会过时。一个正确的结果是可靠的。

示例

演示了如何使用 expired 来检查指针的有效性。

#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();
}
结果
gw is valid
gw is expired