首页 > 编程语言 >C++ 析构函数 virtual 虚析构

C++ 析构函数 virtual 虚析构

时间:2023-12-13 18:33:38浏览次数:29  
标签:aaa virtual 析构 printf AAA 虚析构

结论:当父类存在virtual函数时,则需要实现虚析构函数。

直接上代码:

#include<iostream>
#include<memory>

class AAA {
public:
    AAA() { printf("AAA 构造 ... \n"); }
    //virtual ~AAA() { printf("AAA 析构 ... \n"); }
    virtual void SayOk() = 0;
};

class aaa :public AAA {
public:
    aaa() { printf("aaa 构造 ... \n"); }
    ~aaa() { printf("aaa 析构 ... \n"); }
    virtual void SayOk() { printf("aaa SayOk ... \n"); }
};

void test()
{
    //aaa aa;

    if (1)
    {
        std::shared_ptr<AAA> sp = std::make_shared<aaa>();
        sp->SayOk();
        sp = nullptr;
    }

    printf("-------------- 分隔线 -------------- \n");

    if (1)
    {
        AAA * pp = new aaa();
        pp->SayOk();
        delete pp;
        pp = nullptr;
    }

}

int main()
{
    test();
    return 0;
}

如上,假如AAA不实现虚析构函数,则通过new出来的对象,被析构时,会调用不到子类的析构。

 

父类声明了虚析构,则能够正确调用子类的析构。

 

标签:aaa,virtual,析构,printf,AAA,虚析构
From: https://www.cnblogs.com/xcywt/p/17899679.html

相关文章

  • 使用免费内网穿透工具随时随地访问PVE(Proxmox Virtual Environment)
    什么是PVE?ProxmoxVirtualEnvironment(简称ProxmoxVE)是一种开源的虚拟化平台,它集成了虚拟化和容器技术。以下是一些导致越来越多人使用ProxmoxVE的原因:开源性质:ProxmoxVE是开源软件,这意味着用户可以自由地查看、修改和分发其源代码。这种自由度吸引了许多用户,尤其是那些寻求经......
  • pycharm中三种解释器:virtual Enviroment、conda Enviroment、system interpreter
    1、systeminterpreter不推荐使用2、VirtualEnvironment—Python的虚拟环境可以使一个Python程序拥有独立的库library和解释器interpreter,而不用与其他Python程序共享统一个library和interpreter。虚拟环境的好处是避免了不同Python程序间的互相影响(共同使用globallibrary和i......
  • linux python virtualenv虚拟环境安装
    pythonvirtualenv虚拟环境安装pip3installvirtualenvpip3installvirtualenvwrapper创建环境存放目录mkdir$HOME/.virtualenvs查看已安装的virtualenvfind/-namevirtualenv查看已安装的virtualenvwrapper.shfind/-namevirtualenvwrapper.sh查看......
  • 内核文档翻译 —— Overview of the Linux Virtual File System
    原文:https://www.kernel.org/doc/html/latest/filesystems/vfs.html#overview-of-the-linux-virtual-file-systemIntroductionTheVirtualFileSystem(alsoknownastheVirtualFilesystemSwitch)isthesoftwarelayerinthekernelthatprovidesthefilesystemin......
  • Putty与VirtualBox中的Ubuntu的连接问题
    只需在虚拟机的设置修改其中一个网卡的连接方式为Host-Only方式即可。具体操作如图:然后打开Ubuntu,查找对于网卡的ip地址,使用在终端中使用ifconfig命令:打开Putty软件:open,输入你的账号和密码即可连接,第一次连接时会弹出一个窗口,点击接收即可。......
  • (二十八)C#编程基础复习——析构函数
    特此声明:本教程内容可能有部分参照其他博主的观点或描述,但始终不影响我学习的热情,代码全部自己手工敲打,编辑此教程目的不是为了博取大家眼球,也不是为利益所驱,只是纯属为了方便自己学习,编辑的过程中也让自己加深了对C#各个基础的印象,同时也让自己编码过程更加流畅顺利,最后还能帮助......
  • VirtualBox安装Debian12
    下载地址:VirtualBox7.0官网:https://www.virtualbox.org/wiki/DownloadsDebian12官网:https://www.debian.org/index.zh-cn.html安装打开VirtualBox,点击新建,根据提示安装。安装时网络不佳建议断网,避免更新下载耗时太久。使用putty/xshell连接服务器,需要设置网络为桥......
  • 无法安装ensp ?各种报错解决方案(virtualbox无法运行,启动AR失败,错误代码40等)
    安装eNSP。发现软件中路由器无法启动。VirtualBox是华为eNSP使用的必须运行环境,它提供虚拟网卡设备作为服务器为软件提供运行环境。1.提示出现VirtualBoxOracle无法在此项目运行。我根据百度上的方法,重新还原系统。无果。之前计算机中安装VirtualBox版本为6.0,重新下载了5.3版本的......
  • C#中的virtual和override关键字
    ......
  • 消除开关机都会提示Failed to start Setup Virtual Console
    我的manjaroLinux每次开关机都会提示FailedtostartSetupVirtualConsole,启动完成后不影响正常使用,但每次开关机都会有一个红色失败告警,并且发现没有这个告警的时候系统启动速度更快。1、修改文件:sudovim/etc/vconsole.conf2、将其中的KEYMAP=cn修改为KEYMAP=us保存,重启......