设为首页 加入收藏

TOP

3.5.11 析构函数
2013-10-07 15:32:24 】 浏览:127
Tags:3.5.11 函数

3.5.11   析构函数

创建类的对象时,会自动调用某个合适的构造函数。同样,当对象被摧毁时,也会自动调用一个析构函数(Destructor)。

例如,对象的摧毁出现在如下两种情况:

以某个类作为数据类型的变量超出其作用范围。

用delete操作符删除动态分配的对象。

与构造函数一样,析构函数也是一个成员函数。对于类C,其析构函数的原型如下所示(符号~与类名C之间可以有空格):

 

由于析构函数不带参数,因此不能被重载,这样,每个类只能拥有一个析构函数。与构造函数一样,析构函数也没有返回类型,所以下面的析构函数声明是错误的:

例3-34

程序清单3-8的输出如下:

 

main函数的工作流程如下:

1. 通过如下语句创建一个局部对象c0:

 

对象c0的创建将伴随着转型构造函数的调用,c0此时生效,直到main函数退出之前的那一刻(见7)。

2. 创建对象c1,对象c1的创建将伴随着默认构造函数的调用。

3. 创建对象c2,对象c2的创建将伴随着转型构造函数的调用。

4. 由于定义c1和c2的语句位于一个程序块当中,因此在程序块结束之前的一刻,分别调用了c1和c2的析构函数。

5. 使用new操作符动态地分配一个对象,并将其地址保存在类型为C*的指针ptr中,由于使用了操作符new,调用默认构造函数以初始化ptr所指对象。

6. 使用delete操作符删除ptr所指对象,此时自动调用析构函数。

7. main函数在退出之前调用c0的析构函数(上面的输出信息可以证明这一点)。

程序清单3-8   构造函数与析构函数的调用

 

我们已经知道,在创建对象时,类的构造函数负责完成初始化和其他相关的操作,而析构函数在对象摧毁时完成相应的清理工作(例如将构造函数分配的资源释放掉)。我们建议为每个带有数据成员的类设计一个默认构造函数,如果需要,也要设计其他构造函数及析构函数。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇3.6.4 类的实现 下一篇3.6.3 解决方案

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目