std::weak_ptr
来自cppreference.com
在头文件 <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 | T |
[编辑] 成员函数
创建一个新的 weak_ptr (公共成员函数) | |
销毁 weak_ptr (公共成员函数) | |
分配 weak_ptr (公共成员函数) | |
修改器 | |
释放被管理对象的所有权 原文: releases the ownership of the managed object (公共成员函数) | |
交换所管理的对象 (公共成员函数) | |
观察者 | |
返回 shared_ptr 对象,管理对象的数量 原文: returns the number of shared_ptr objects that manage the object (公共成员函数) | |
检查是否被引用的对象已被删除 原文: checks whether the referenced object was already deleted (公共成员函数) | |
创建一个 shared_ptr 管理引用的对象原文: creates a shared_ptr that manages the referenced object(公共成员函数) | |
提供业主弱指针的顺序 原文: provides owner-based ordering of weak pointers (公共成员函数) |
[编辑] 非成员函数
(C++11) |
特化std::swap算法 (函数模板) |
[编辑] 示例
演示如何通过锁来保证指针的有效性
#include <iostream> #include <memory> std::weak_ptr<int> gw; void f() { if (auto spt = gw.lock()) { // Has to be copied into a shared_ptr before usage 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