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版)

12.5 析构函数

现在,我们知道如何为一个vector保存元素。我们简单地为这些元素在自由空间中分配足够的空间,并且通过一个指针来访问它们:

这样,sz就是元素的数量。我们在构造函数中初始化它,用户可以通过调用size()得到vector中的元素数量。在构造函数中使用new来分配元素空间,从自由空间返回的指针被保存在成员指针elem中。

注意,我们将元素初始化为它们的默认值(0.0)。标准库vector就是这样做的,因此我们认为在一开始最好也这样做。

不幸的是,我们第一个vector版本会泄漏内存。在构造函数中,它使用new来为元素分配内存。遵循在12.4节中描述的规则,我们必须保证使用delete释放这些内存。思考下面程序:

当我们离开函数f()时,v在自由空间中创建的元素没有释放。我们可以为vector定义一个clean_up()操作并调用它:

这段代码运行良好。但是,自由空间一个最常见的问题是人们会忘记delete。clean_up()也会产生同样问题,人们可能忘记调用它。我们可以做得更好。基本思路是令编译器知道一个可以做与构造函数相反事情的函数,就像它了解构造函数一样。必然地,这个函数被称为析构函数(destructor)。就像一个类对象创建时会隐式调用构造函数一样,当一个对象离开其作用域时会隐式调用析构函数。构造函数确保一个对象被正确创建并初始化。与之相反,析构函数确保一个对象销毁前被正确清理。例如: ...

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