首页 > 其他分享 >为什么默认情况下析构函数不是虚拟的

为什么默认情况下析构函数不是虚拟的

时间:2023-02-17 20:33:45浏览次数:43  
标签:虚拟 函数 Derived 默认 Base 下析构 析构 派生类

因为很多类并不是设计来作为基类使用的, 虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)。

那么我什么时候应该声明一个析构函数为虚拟的呢? 每当该类具有至少一个虚函数时。 拥有虚函数表明一个类是作为一个派生类的接口,如果是派生类的对象可以通过指向基类的指针销毁。 例如:

class Base {
        // ...
        virtual ~Base();
    };

    class Derived : public Base {
        // ...
        ~Derived();
    };

    void f()
    {
        Base* p = new Derived;
        delete p;    // 用于确保调用 ~Derived 的虚拟析构函数
    }    

如果 Base 的析构函数不是虚拟的,Derived 的析构函数就不会被调用 - 可能产生不良影响,例如 Derived 拥有的资源不 被释放

 

标签:虚拟,函数,Derived,默认,Base,下析构,析构,派生类
From: https://www.cnblogs.com/wozhuyinghao/p/17131433.html

相关文章

  • 虚拟机安装教程
    1、官网下载,准备centos镜像https://www.centos.org/download/进入后,CentOS-7-x86_64-DVD-2009.iso2、下载VMwareWorkstationProhttps://www.vmware.com/cn/product......
  • 固定虚拟机ip地址
    修改配置文件:在配置文件/etc/sysconfig/network-scripts/ifcfg-ens33中,在一开始虚拟机设置的IP地址是dhcp是动态地址,所以才会一直变化,现在就要改成static再自己设置一个固......
  • Python3默认字符编码的问题
    输出报错UnicodeEncodeError:'ascii'codeccan'tencodecharactersinposition0-1:ordinalnotinrange(128)>>>importsys>>>sys.stdout.encoding'ANSI_X3.4-1......
  • 国内OpenAI充值,购买ChatGPt plus一站式流程(使用depay注册海外支付(万事达)和OKX(欧易)进行
    OpenAI的ChatGPT已经推出,但是对国内有限制,购买使用十分不便,经过摸索研究终于购买成功,记录分享一下在国内购买的方法,两个链接放在前面方便取用。depay快捷跳转链接:https:/......
  • CtrlList 虚拟列表加载技术
    虚拟列表控件 虚拟列表控件是具有LVS_OWNERDATA样式的列表视图控件。此样式使控件能够支持最多为DWORD的项计数(默认项计数仅扩展到 int)。但是,此样式具有的最大优......
  • 建筑CAD软件导出图纸时如何默认保留墙基线?
    有些设计师在建筑CAD软件中绘制完成图纸后,想要在导出图纸的时候默认保留墙基线,但却不知道该如何设置,本节建筑CAD教程就和小编一起来了解一下浩辰CAD建筑软件中导出图纸时是......
  • 建筑CAD软件如何设置当前默认层高?
    在绘制CAD建筑图的过程中,必然少不了要对层高进行设置,如果每层的层高都一样,想要调整建筑CAD软件默认当前层高的话该如何设置?本节建筑CAD教程就和小编一起来了解一下浩辰CAD......
  • linux修改默认ssh端口
    一、修改配置文件1、取消注释Port22,增加自己想要的ssh端口。vim/etc/ssh/sshd_configPort22Port6666#AddressFamilyany#ListenAddress0.0.0.02、ssh默认监听......
  • 架构师成长之路之Linux Bridge+VLAN == 虚拟交换机
    总结:(1)物理交换机存在多个VLAN,每个VLAN拥有多个端口。同一VLAN端口之间可以交换转发,不同VLAN端口之间隔离。所以交换机包含两层功能:交换与隔离。(2)Linux的VLAN设备......
  • 【SQL】建表是给时间字段增加默认值
    建表是给时间字段增加默认值oracle DEFAULTSYSDATE  sqliteVARCHAR2(19)DEFAULT(DATETIME(CURRENT_TIMESTAMP,\'localtime\'))        ......