zoukankan      html  css  js  c++  java
  • 通过C++编译视频平台为什么要使用virtual虚析构函数?

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

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

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

    代码1:

    代码2:

    运行函数:

    执行代码1运行结果:

    执行代码2运行结果:

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

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

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

     
  • 相关阅读:
    LightOJ 1203--Guarding Bananas(二维凸包+内角计算)
    断言assert()与调试帮助
    POJ 3528--Ultimate Weapon(三维凸包)
    POJ 2208--Pyramids(欧拉四面体体积计算)
    HDU 1411--校庆神秘建筑(欧拉四面体体积计算)
    HDU 1241 DFS
    HDU 2037(贪心)
    一次傻乎乎的错误QAQ
    封装Qt的SQLite接口类
    最小生成树(Kruskal算法)模板
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/14808038.html
Copyright © 2011-2022 走看看