C++之构造函数与析构函数

来源:互联网 发布:mac破解软件大全下载 编辑:程序博客网 时间:2024/06/01 08:00

最近在学习C++,每次看到继承这段的时候,总是一边感慨这门语言的难度,一边感慨这门语言的神奇之处。最近看到了构造函数这段,问了自己这样一个问题,构造函数可以是虚函数吗?不是很清楚,于是去查了一些资料。

首先我觉得应该明确的一个问题就是,虚函数的功能是C++中多态的一种实现方式。主要是继承类的某些功能和基类的某些功能会在实现方式上不同,因此需要重新定义,而我们在调用的时候又希望不要去区分调用的是基类的还是继承类的,于是产生了这样的一个机制。但是对于构造函数来说,却不能够定义成一个虚函数,下面我们从下面两个方面来说明之:

从存储空间的角度:虚函数对应一个虚函数表,而这个虚函数表是存储在实例对象的内存中的。若构造函数是虚函数,那么我们如果想调用构造函数,则必须先找到这个虚函数表,而此时实例还没有创建成功,因此就不能够找到构造函数。

从使用的角度来看,虚函数的主要作用就是在信息不全的情形下,使得重载的函数得到对应的调用,构造函数本身就是要初始化实例,使用虚函数也没有实际的意义,因此构造函数没有必要时虚函数。


而与构造函数相对应的析构函数则不同,可以是虚函数。甚至在很多的情形下,析构函数最好能够定义成虚函数,这样在析构的时候,我们总是能够调用到正确的析构函数。

0 0