美文网首页
C++的虚析构函数

C++的虚析构函数

作者: IT孤独者 | 来源:发表于2016-12-29 14:06 被阅读0次

    首先,我们必须知道,虚析构函数是有其本身的目的,所以正常情况下,我们不应该声明虚析构函数。

    构造函数和析构函数是一个互逆过程,但是他们并不是成轴对称的过程,而是类似中心对称的过程,你可以想象成输入和输出的关系。

    对象被创建时,从父类的构造函数开始一直到子类的构造函数为止,他的发起点是子类的构造函数(发起点很重要,如果不理解这个,就能很好理解虚析构函数的作用)

    对象被释放是,从子类的析构函数开始一直到父类的析构函数为止,他的发起点是子类的析构函数。

    如果对象的析构函数没有定义成虚的,他的执行过程和上述的一致,但是,如果定义成虚的,那么他的发起点是这个对象实际的子类析构函数,这个不好描述,我们给两个例子。

    没有定义虚析构函数的源码 输出

    从上图可知,我们定义的类B的析构函数并没有执行,这就有可能造成内存泄漏。再看一个例子:

    定义了虚析构函数 输出

    从例子可以看出,当我们定义了虚析构函数,那么类B的析构函数也会被执行。

    从上面的对比测试可知,虚析构函数可以让对象实现完全的释放,但是,如果没有必要定义虚析构函数,我们最好不要定义虚析构函数,因为功能的提升,会带来额外的开销,这是显而易见的道理!

    相关文章

      网友评论

          本文标题:C++的虚析构函数

          本文链接:https://www.haomeiwen.com/subject/autpvttx.html