Skip to Main Content
C++程序设计语言(第4部分:标准库)(原书第4版)
book

C++程序设计语言(第4部分:标准库)(原书第4版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced content levelIntermediate to advanced
450 pages
6h 57m
Chinese
Pearson
Content preview from C++程序设计语言(第4部分:标准库)(原书第4版)

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)销毁所拥有的对象。释放器表示销毁对象的方法。例如: ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Java并发编程实战

Java并发编程实战

Brian Goetz, Tim Peierls
C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉
可编程网络自动化

可编程网络自动化

Jason Edelman, Scott S. Lowe, Matt Oswalt

Publisher Resources

ISBN: 9787111544395