通过C++编译视频平台为什么要使用virtual虚析构函数?

Posted jinnan88

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过C++编译视频平台为什么要使用virtual虚析构函数?相关的知识,希望对你有一定的参考价值。

大家知道TSINGSEE青犀视频云边端架构系列编译用了几种不同的架构,同时,为了满足不同形式编译的需求,我们也会在编译当中运用到不同的函数来实现。比如在编译中,我们使用了C++语言,为了在对象不被使用之后释放资源,虚函数也可实现多态,我们将虚函数加上了virtual。

C++中基类的析构函数为什么要用virtual虚析构函数?本文我们依据自身的开发经验,和大家分享一下。

我们先来看两段代码的运行结果对比下:

代码1:

代码2:

运行函数:

执行代码1运行结果:

执行代码2运行结果:

从上述结果可以看出执行代码1和代码2有明显差异。

执行代码1可以正常释放资源,而执行代码2则没有正常释放资源。因此,MyClass类的析构函数并没有被调用,但是正常情况下析构函数里都会释放各种资源,而析构函数不被调用的话就会导致内存泄漏。代码1加上virtual关键字,运行次代码会调用析构函数,避免内存泄漏。

所以c++中基类采用virtual虚析构函数主要是为了防止内存泄漏。如果派生类中申请内存空间,而且在析构函数中对内存进行释放。如果没有采用虚构函数,而释放该类对象,派生类对象就不会得到动态绑定。这种情况就会导致内存泄漏。所以为了防止内存泄漏,只要继承关系,被继承的类析构函数是虚函数,都会加上virtual关键字。

以上是关于通过C++编译视频平台为什么要使用virtual虚析构函数?的主要内容,如果未能解决你的问题,请参考以下文章

virtual虚函数

C#虚方法virtual详解

C++多态的原因

C++多级虚继承编译问题

C#中的虚方法Virtual

虚方法virtual详解