定义于头文件
<memory>
|
||
template< class T > class weak_ptr;
|
(C++11 起) | |
std::weak_ptr
是一种智能指针,它对被 std::shared_ptr 管理的对象存在非拥有性(「弱」)引用。在访问所引用的对象前必须先转换为 std::shared_ptr。
std::weak_ptr
用来表达临时所有权的概念:当某个对象只有存在时才需要被访问,而且随时可能被他人删除时,可以使用 std::weak_ptr
来跟踪该对象。需要获得临时所有权时,则将其转换为 std::shared_ptr,此时如果原来的 std::shared_ptr 被销毁,则该对象的生命期将被延长至这个临时的 std::shared_ptr 同样被销毁为止。
此外,std::weak_ptr
还可以用来避免 std::shared_ptr 的循环引用。
目录 |
成员类型 | 定义 | ||||
element_type |
|
构造新的weak_ptr (公开成员函数) |
|
销毁 weak_ptr (公开成员函数) |
|
为weak_ptr 赋值 (公开成员函数) |
|
修改器 |
|
释放被管理对象的所有权 (公开成员函数) |
|
交换被管理对象 (公开成员函数) |
|
观察器 |
|
返回管理该对象的 shared_ptr 对象数量 (公开成员函数) |
|
检查被引用的对象是否已删除 (公开成员函数) |
|
创建管理被引用的对象的shared_ptr (公开成员函数) |
|
提供弱指针的基于拥有者顺序 (公开成员函数) |
(C++11)
|
特化 std::swap 算法 (函数模板) |
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3001 | C++17 | 未为数组支持更新 element_type
|
已更新 |
演示如何通过锁来保证指针的有效性
#include <iostream> #include <memory> std::weak_ptr<int> gw; void f() { if (auto spt = gw.lock()) { // 使用之前必须复制到 shared_ptr std::cout << *spt << "\n"; } else { std::cout << "gw is expired\n"; } } int main() { { auto sp = std::make_shared<int>(42); gw = sp; f(); } f(); }
输出:
42 gw is expired