C++中析构函数

析构函数:
1.析构函数不能被重载;
2.析构函数可以是虚函数;
3.析构函数没有参数,没有返回值;
4.当类对象的生命周期结束,系统会自动调用析构函数;
5.若没有显式的析构函数,系统会调用默认的析构函数;
下面记录一下一个小示例,目的是说明虚析构函数的必要性。若析构函数不是虚函数,会发生什么,vs2010下创建控制台输出程序,下面看代码,以及运行实例;
classObject.cpp

#include "stdafx.h"
#include <iostream>
using namespace std;class Base
{
public:Base(){cout<<"构造函数Base()"<<endl;};~Base(){cout<<"析构函数~Base()"<<endl;}//基类的析构函数不是虚析构函数
protected:
private:
};class Inherit:public Base
{
public:Inherit(){cout<<"构造函数Inherit()"<<endl;}~Inherit(){cout<<"析构函数Inherit()"<<endl;}
protected:
private:
};int _tmain(int argc, _TCHAR* argv[])
{Base *base = new Inherit;delete base;//下面3行代码是一个小插曲,作者记录下来巩固基础int a[] = {12,13,23,4,5};cout<<"sizeof(*a)="<<sizeof(*a)<<endl;cout<<"*a="<<*a<<endl;//*a是数组a的第一个元素,sizeof(*a)即整型的大小 4system("pause");return 0;
}

运行上面的代码,控制台输出结果是:
在这里插入图片描述
可以看出析构函数调用的时候只调用了,父类的析构函数,没有调用子类的析构函数,即没有释放子类的对象,无形中造成内存泄漏,下面我们来将父类的析构函数定义为虚析构,即在父类的析构函数前加关键字virtual,将父类析构函数改为下面这样,其它不变。

Base(){cout<<"析构函数Base()"<<endl;}//基类的析构函数是虚析构函数

编译运行程序,结果如下:
在这里插入图片描述
总结:当一个类作为父类的时候,最好将此类的析构函数定义为虚析构函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524307.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins进阶系列之——07更改Jenkins的主目录

Jenkins进阶系列之——07更改Jenkins的主目录 参考链接&#xff1a; https://blog.csdn.net/pansaky/article/details/80749567 Jenkins默认会存放在用户主目录下的.jenkins文件夹中 如&#xff1a;Linux root用户&#xff1a;/root/.jenkins 注意&#xff1a;这是linux版本的…

Windows OpenGL 图像曝光度调节

目录 一.OpenGL 图像曝光度调节 1.原始图片2.效果演示 二.OpenGL 图像曝光度调节源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 Op…

QtCreate不能使用代码提示功能

解决方法&#xff1a; 在QtCreate中点击帮助---->关于插件------->C(ClangCodeModel)去掉勾&#xff0c;保存------>关闭QtCreate后重新打开&#xff0c;问题解决。

kubernetes精华问答 | Swarm和K8S的共同点有哪些?

kubernetes&#xff0c;简称K8s&#xff0c;是用8代替8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kubernetes提供了应…

The server quit without updating PID file

The server quit without updating PID file (/usr/local/var/mysql/bogon.pid) 今天网站web页面提交内容到数据库&#xff0c;发现出错了&#xff0c;一直提交不了&#xff0c;数找了下原因&#xff0c;发现数据写不进去&#xff01;第一反应&#xff0c;重启mysql数据库&…

遍历可执行文件所在目录下的指定类型的文件

示例&#xff1a;遍历可执行文件目录下指定的txt类型的文件&#xff0c;编译环境vs2010,项目类型控制台输出程序&#xff1b; 代码实现&#xff1a; main.cpp // DocumentTraveral_demo.cpp : 定义控制台应用程序的入口点。#include "stdafx.h" #include <iostre…

开发者如何快速精简容器云镜像?| 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;阿木接触过容器云或者用过容器的同学一般都会遇到容器镜像占用空间很大的问题&#xff0c;遇到此类问题的时候大部分同学可能更加习惯于为容器的镜像仓库增加磁盘空间&#xff0c;当然这种方式无可厚非&#xff0c;…

Linux环境 Jenkins集成构建SonarQube

参考链接&#xff1a; https://www.linuxhub.org/?p4450 https://blog.51cto.com/damaicha/2118766 https://max.book118.com/html/2019/0107/8067110025002000.shtmJenkins集成构建SonarQube 一、前提准备 应用服务器apache-tomcat-9.0.20.tar.gzjenkinsjenkins.warmysql版…

Windows OpenGL ES 图像对比度调节

目录 一.OpenGL ES图像对比度调节 1.原始图片2.效果演示 二.OpenGL ES 图像对比度调节源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基…

dubbo之.xml配置文件报错

【dubbo之.xml配置文件报错】Multiple annotations found at this line: - cvc-complex-type.2.4.c: The 异常现象&#xff1a; 1.dubbo配置xml文件报错 “Multiple annotations found at this line:- cvc-complex-type.2.4.c: The matching wildcard is strict, but no decl…

验证电脑的字节序

字节序的分类 大端字节序&#xff1a;低地址存高位&#xff0c;高地址存底位&#xff0c;网络字节序又叫大端端字节序&#xff1b; 小端字节序&#xff1a;低地址存地位&#xff0c;高地址存高位&#xff1b; 验证示例 记录2个示例来说明电脑采用的大端字节序还是小端字节序…

刚刚出新的Kubernetes 却曝出了“高危”安全漏洞;亚马逊将推免费新闻视频服务,对标苹果 | 极客头条...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 被宣布取消的AirPower&#xff08;图片来源网络&#xff09;【4月1日 星期一】云の声音5G最极致的应用领域应该是8K电视。——富士康科技集团副总裁、富士康企业大学创校校长 陈振国…

Maven实战手册

一、maven的作用&#xff1a; 1.1jar包的统一依赖管理&#xff0c;节省空间1.2项目的一键构建 二、Maven能做什么&#xff1f; 2.1编译 测试(junit) 运行 打包 部署 三、Maven的安装配置署 3.1下载安装3.2 官网链接&#xff1a;http://maven.apache.org/download.cgi 3.3下…

Windows OpenGL 图像对比度调节

零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 转场 零基础 OpenGL ES 学习路线推荐…

大端字节序与小端字节序的转换

逐步加深对字节操作的理解&#xff0c;记录一下大端字节序与小端字节序的转换&#xff0c;开发环境是vs2010&#xff0c;项目类型是控制台输出程序&#xff0c;下面是代码实现&#xff1a; // ByteOrder_demo.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h&q…

2019年技术盘点微服务篇(一) | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;孙浩峰过去几年来&#xff0c;“微服务架构”方兴未艾&#xff0c;尽管这种架构风格没有确切的定义&#xff0c;但我们已经看到许多项目凭借此架构取得了积极的结构&#xff0c;因此对于许多开发者来说&#xff0c;…

Oracle11g创建表空间语句

在plsql工具中执行以下语句&#xff0c;可建立Oracle表空间。 /*分为四步 */ /*第1步&#xff1a;创建临时表空间 */ create temporary tablespace yuhang_temp tempfile D:\oracledata\yuhang_temp.dbf size 50m autoextend on next 50m maxsize 20480m extent mana…

简记模态对话框和非模态对话框

模态对话框和非模态对话框的区别 模态对话框会阻止与其它窗口的交互&#xff0c;而非模态对话框不会。即模态对话框显示的时候&#xff0c;不能操作其它窗口&#xff0c;要想操作其它窗口&#xff0c;必须关闭该模态对话框&#xff1b;非模态对话框显示的时候&#xff0c;可以…

虚拟化精华问答 | 虚拟化的关键技术有哪些?

在实际的生产环境中&#xff0c;虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用&#xff0c;透明化底层物理硬件&#xff0c;从而最大化的利用物理硬件。今天就让我们一起来看看关于虚拟化的精华问答吧。1Q&#xff1a;什么是虚拟化&#xf…

idea工具拉取GitHub远程代码

需求&#xff1a;idea工具拉取GitHub远程代码&#xff1a; 项目代码地址&#xff1a; gitgithub.com:gb-heima/createNewProject.git可以先进行test测试连接情况&#xff1a;