析构函数的定义

来源:互联网 发布:js聚合物水泥防水浆料 编辑:程序博客网 时间:2024/06/04 00:26

首先来到一个问题,什么是析构函数,在《C++语言程序设计》(清华大学出版社,以后的博客关于C++的概念部分大多借鉴于此版教材)中,析构函数与构造函数对应,构造函数是始,析构函数是终,比如借了邻居的东西(内存),是要还的(释放),析构函数是做收尾工作的。

他与构造函数的作用几乎正好相反,用来完成对象呗删除前的一些清理工作,是在对象的生存期即将结束的时刻被自动调用的(有特殊情况是可以主动调用析构函数的,后面的博客会讲到),析构函数调用完,也就是说对象彻底凉了,对象用掉的内存空间也要给人家释放回来。一般是个公有函数成员,命名方式是:~类名(){}  

和构造函数不同的是析构函数不接受任何的参数,也就是说上述命名方式中,小括号里面不可以有任何东西。如果希望程序在对象被删除之前的时刻自动完成某些事(比如说delete掉new出来的内存),就可以把你想完成的事件写进析构函数中。此外,析构函数的调用执行顺序与构造函数刚好相反,这也是显而易见的。

class Clock{

public:

        Clock();           ---------->构造函数

        void setTime(int newh,int newm,int news);--------->属性

        void showTime();------------->行为

       ~Clock(){}---------------->析构

private:

      int hour,mintue,second; --------------->私有成员属性

};

创建组合类,类有内嵌对象中,构造函数和析构函数都将按照一定顺序来多次调用。

构造:

调用顺序按照内嵌对象在组合类的定义中出现的顺序,注意,内嵌对象在构造函数的初始化列表中出现的顺序与内嵌对象构造函数的调用顺序没有关系。然后再执行自己类的构造函数。

析构函数相反,析构函数被执行完毕后,内嵌对象的析构函数被一一执行,这些内嵌函数的析构函数调用顺序与他们在组合类的定义中出现的次序是反过来的。这种时候要调用内嵌对象的析构函数,所以此时没有函数体的析构函数也并不是什么都不做。


原创粉丝点击