34.3 资源管理指针
一个指针指向一个对象(或不指向任何东西)。但是,指针并不能指出谁(如果有的话)拥有对象。即,仅仅查看指针,我们得不到任何关于“谁应(或是如何,或是是否)删除对象”的信息。在<memory>中,我们可以找到表达所有权的“智能指针”:
·unique_ptr(见34.3.1节)表示互斥的所有权
·shared_ptr(见34.3.2节)表示共享的所有权
·weak_ptr(见34.3.3节)可打破循环共享数据结构中的回路
这些资源句柄已在5.2.1节中介绍过。
34.3.1 unique_ptr
unique_ptr(定义在<memory>中)提供了一种严格的所有权语义:
·一个unique_ptr拥有一个对象,它保存一个指针(指向该对象)。即,unique_ptr有责任用所保存的指针销毁所指向的对象(如果有的话)。
·unique_ptr不能拷贝(没有拷贝构造函数和拷贝赋值操作),但可以移动。
·unique_ptr保存一个指针,当它自身被销毁时(例如线程控制流离开unique_ptr的作用域,见17.2.2节),使用关联的释放器(如果有的话)释放所指向的对象(如果有的话)。
unique_ptr的用途包括:
·为动态分配的内存提供异常安全(见5.2.1节和13.3节)
·将动态分配内存的所有权传递给函数
·从函数返回动态分配的内存
·在容器中保存指针
我们可以将unique_ptr理解为一个简单的指针(“包含指针”)或(如果有释放器的话)一对指针:
当一个unique_ptr被销毁时,会调用其释放器(deleter)销毁所拥有的对象。释放器表示销毁对象的方法。例如: ...
Get C++程序设计语言(第4部分:标准库)(原书第4版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.