大家知道TSINGSEE青犀视频云边端架构系列编译用了几种不同的架构,同时,为了满足不同形式编译的需求,我们也会在编译当中运用到不同的函数来实现。比如在编译中,我们使用了C++语言,为了在对象不被使用之后释放资源,虚函数也可实现多态,我们将虚函数加上了virtual。
C++中基类的析构函数为什么要用virtual虚析构函数?本文我们依据自身的开发经验,和大家分享一下。
我们先来看两段代码的运行结果对比下:
代码1:
代码2:
运行函数:
执行代码1运行结果:
执行代码2运行结果:
从上述结果可以看出执行代码1和代码2有明显差异。
执行代码1可以正常释放资源,而执行代码2则没有正常释放资源。因此,MyClass类的析构函数并没有被调用,但是正常情况下析构函数里都会释放各种资源,而析构函数不被调用的话就会导致内存泄漏。代码1加上virtual关键字,运行次代码会调用析构函数,避免内存泄漏。
所以c++中基类采用virtual虚析构函数主要是为了防止内存泄漏。如果派生类中申请内存空间,而且在析构函数中对内存进行释放。如果没有采用虚构函数,而释放该类对象,派生类对象就不会得到动态绑定。这种情况就会导致内存泄漏。所以为了防止内存泄漏,只要继承关系,被继承的类析构函数是虚函数,都会加上virtual关键字。