- 常用方法:
- 使用
expired()
成员函数,它返回一个 bool
值,若 weak_ptr
所指向的对象已被释放(过期),则返回 true
,否则返回 false
。
- 使用
lock()
成员函数,若 weak_ptr
所指向的对象未过期,lock()
会返回一个有效的 std::shared_ptr
,指向该对象;若过期,则返回一个空的 std::shared_ptr
。可以通过检查 lock()
返回的 shared_ptr
是否为空来判断 weak_ptr
是否过期。
- 代码示例:
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);
std::weak_ptr<int> weakPtr = sharedPtr;
// 使用 expired() 检查
if (weakPtr.expired()) {
std::cout << "weakPtr has expired." << std::endl;
} else {
std::cout << "weakPtr has not expired." << std::endl;
}
// 释放 sharedPtr
sharedPtr.reset();
// 使用 lock() 检查
std::shared_ptr<int> lockedPtr = weakPtr.lock();
if (lockedPtr) {
std::cout << "weakPtr has not expired, value: " << *lockedPtr << std::endl;
} else {
std::cout << "weakPtr has expired." << std::endl;
}
return 0;
}