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

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

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate 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.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

算法精讲视频课程:24篇系列讲座

算法精讲视频课程:24篇系列讲座

罗伯特·塞奇威克, 凯文·韦恩(Kevin Wayne)
可编程网络自动化

可编程网络自动化

Jason Edelman, Scott S. Lowe, Matt Oswalt
C语言核心技术(原书第2版)

C语言核心技术(原书第2版)

Peter Prinz, Tony Crawford
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111544395