复习:虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)

devtools/2024/11/18 2:24:59/

虚析构函数

虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对
象。

#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;class Base
{
public:Base(){cout << "Base" << endl;}// virtual ~Base()~Base(){cout << "~Base" << endl;}
};class Derived : public Base
{
public:Derived(){cout << "Derived" << endl;}~Derived(){cout << "~Derived" << endl;}
};void test1()
{Base *pb;pb = new Derived;delete pb;
}int main()
{test1();system("pause");return 0;
}

如果析构函数不加virtual,delete pb只会执行Base的析构函数,而不是真正的Derived析构函数。因为不是virtual函数,所以调用的函数依赖于指向静态类型,即Base。如下图所示。
在这里插入图片描述

virtual ~Base();

基类Base析构函数,加上virtual后,正调用子类的析构函数。
在这里插入图片描述

纯虚析构函数

纯虚析构函数在 c++中是合法的,但是在使用的时候有一个额外的限制:必须为纯
虚析构函数提供一个函数体。 那么问题是:如果给虚析构函数提供函数体了,那
怎么还能称作纯虚析构函数呢? 纯虚析构函数和非纯析构函数之间唯一的不同之
处在于纯虚析构函数使得基类是抽象类,不能创建基类的对象。
在这里插入图片描述


http://www.ppmy.cn/devtools/104915.html

相关文章

Unity(2022.3.41LTS) - UI详细介绍-TMP

目录 零. 简介 一、主要特点 二、使用方法 三.组件详情 四.制作TMP字体 五、优化和注意事项 零. 简介 在 Unity 中&#xff0c;TextMesh Pro&#xff08;TMP&#xff09;是一种高级的文本渲染解决方案&#xff0c;相比传统的 Unity 文本组件&#xff0c;它提供了更多的功…

数组扁平化方法

参考文章 法1&#xff1a;朴质的递归实现 遍历数组的每一项&#xff0c;如果每一项依然是数组&#xff0c;就继续调用递归方法&#xff1b;如果是基本数据类型&#xff0c;就添加到结果数组里面 const a [1, [2, [3, [4, 5]]]];const flatten (arr) > {let result [];f…

github私有仓库通过action部署hexo到公开仓库

github私有仓库通过action部署hexo到公开仓库 有一段时间一直将博客md文件直接放到公开仓库然后通过工作流action创建一个gh-page分支&#xff0c;来实现部署 但是这样做有一个问题&#xff0c;如果你的源文件&#xff0c;或者配置文件中有涉及变量&#xff0c;或者密钥key&a…

【Python报错已解决】“ModuleNotFoundError: No module named ‘mne‘”

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言&#xff1a;一、问题描述1.1 报错示例&#xff1a;当我们尝试导入MNE-Python库时&#xff0c;可能会看到以下错误…

国密起步3:GmSSL3使用SM3(哈希)

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码在othertest目录。 目录 …

Vue.js 样式绑定

Vue.js 样式绑定 Vue.js 是一种流行的前端框架&#xff0c;它提供了一种简洁而强大的方式来绑定样式到元素上。样式绑定允许开发者根据组件的状态动态地改变元素的样式。在 Vue 中&#xff0c;样式绑定可以通过多种方式实现&#xff0c;包括类绑定、内联样式绑定和计算属性样式…

C# 编译程序引用C++DLL托管动态链接库实例

构建 C# 程序引用CDLL托管动态链接库 前言1、统一框架版本2、统一编译平台3、C 托管动态链接库的优点3.1、C 托管动态链接库引用方便简单3.2、C 托管动态链接库加快了程序构建和重复利用3.3、C 托管动态链接库源代码更加安全 4、构建与 C# 程序进行互操作的C.DLL动态链接库的三…

SAM 2: The next generation of Meta Segment Anything Model for videos and images

https://ai.meta.com/blog/segment-anything-2/ https://github.com/facebookresearch/segment-anything-2 https://zhuanlan.zhihu.com/p/712068482