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.