虚析构和纯虚析构
时间:2019-09-28
本文章向大家介绍虚析构和纯虚析构,主要包括虚析构和纯虚析构使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
虚析构和纯虚析构的共性
1.可以解决父类指针释放子类对象
2.都需要具体的函数实现
虚析构和纯虚析构的区别
如果是纯虚析构,则该类属于抽象类,无法实例化对象
虚析构语法 virtual ~类名(){}
纯虚析构 virtual ~类名() = 0
纯虚析构的类外实现 类名::~类名(){}
1 #include<bits/stdc++.h> 2 #include<iostream> 3 using namespace std; 4 5 class Animal 6 { 7 public: 8 Animal() 9 { 10 cout << "Animal构造函数调用" << endl; 11 } 12 virtual void speak() = 0; 13 14 virtual~Animal() = 0; 15 }; 16 17 Animal::~Animal() 18 { 19 cout << "Animal 纯虚析构函数调用" << endl; 20 } 21 22 class Cat:public Animal 23 { 24 public: 25 Cat(string name) 26 { 27 cout << "Cat 构造函数调用" << endl; 28 m_Name = new string(name); 29 } 30 31 virtual void speak() 32 { 33 cout << *m_Name << "猫在说活" << endl; 34 } 35 36 ~Cat() 37 { 38 cout << "猫析构函数调用" << endl; 39 if(this->m_Name != NULL) 40 { 41 delete m_Name; 42 m_Name = NULL; 43 } 44 45 } 46 public: 47 string *m_Name; 48 }; 49 50 void test() 51 { 52 Animal *animal = new Cat("Tom"); 53 animal->speak(); 54 //通过父类指针去释放,会导致子类对象清理不干净,造成内存泄露 55 //解决方法是给父类增加虚析构函数 56 //虚析构函数是用来解决通过父类指针释放子类对象 57 delete animal; 58 } 59 60 int main() 61 { 62 test(); 63 return 0; 64 }
原文地址:https://www.cnblogs.com/mch5201314/p/11603756.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈Python 函数式编程
- Keras-多输入多输出实例(多任务)
- 利用Vscode进行Python开发环境配置的步骤
- python + selenium 刷B站播放量的实例代码
- 巧用x-cos-traffic-limit header来限制上传下载速率
- centos7上编译安装php7以php-fpm方式连接apache
- 基于Python实现视频的人脸融合功能
- 如何理解python对象
- Virtualenv 搭建 Py项目运行环境的教程详解
- python字符串的index和find的区别详解
- 浅谈Python 参数与变量
- 宝塔面板成功部署Django项目流程(图文)
- Python celery原理及运行流程解析
- Python Scrapy图片爬取原理及代码实例
- Python-for循环的内部机制