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.3 保证

当不能只在单一的作用域(及其子作用域)内使用vector对象时,我们应该怎么做呢?例如:

这一例子具有普遍意义:我们调用一个函数构造一个复杂的数据结构,并将该结构作为结果返回。问题是,如果在“填充”vector对象时发生了异常,那么make_vec()将会造成vector对象所占内存空间的泄漏。一个不相关的问题是,如果该函数成功了,那么我们不得不通过delete销毁由make_vec()返回的对象(参见12.4.6节)。

我们可以通过try语句块处理异常的抛出:

make_vec()函数展示了错误处理的一个十分通用的形式:函数总是试图完成它的工作,而如果它不能完成工作,则它应释放所有的局部资源(在这里是自由存储区中分配的vector对象)并通过抛出异常的方式报告其工作的失败。在这里,异常是由一些其他的函数产生并抛出的(如vector::at());make_vec()只是通过throw直接将该异常重新抛出;这是一种简单而有效地处理错误的方法,并且能够被系统地使用:

·基本保证:代码try…catch的目的是保证make_vec()要么成功,要么在不造成资源泄漏的前提下抛出异常。这通常称为基本保证。如果程序中的某段代码需要能够从异常throw中恢复,那么该段代码就需要提供基本保证。所有的标准库代码均提供了基本保证。 ...

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