Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

14.5.6 vector类的RAII

使用像unique_ptr这样的智能指针看上去有点特别。如何保证我们已经发现了所有需要保护的指针?如何保证我们已经释放了所有指向不应在作用域末尾销毁的对象的指针?考虑14.3.5节中的reserve():

注意,对已有元素的拷贝操作alloc.construct(&p[i],elem[i])可能会抛出异常。因此,p是我们在14.5.1节中所描述问题的一个例子。我们可以采用unique_ptr解决方案。一个更好的解决方案是,将“vector所用内存”认为是一种资源;也就是说,我们可以定义一个vector_base类以代表我们一直使用的基本概念。下图中的三个元素定义了vector的内存使用:

vector_base的代码(为保持完整性而加入了分配器)如下:

注意,vector_base处理的是内存而不是(带类型的)对象。我们的vector实现可以将它用于存储所需元素类型的对象。本质上,vector是vector_base的一个便捷的接口:

我们可以按如下更简单也更正确的方式重新实现reserve(): ...

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

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

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

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

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

Publisher Resources

ISBN: 9787111562252