博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之虚析构函数
阅读量:6374 次
发布时间:2019-06-23

本文共 1245 字,大约阅读时间需要 4 分钟。

代码一、

#include 
using namespace std;class Base{public: Base(){}; ~Base() { cout << "Base destructor." << endl; };};class Derive : public Base{public: Derive(){}; ~Derive() { cout << "Derive destructor." << endl; };};int main(int argc, char **argv){ cout << "delete pBase" << endl; Base *pBase = new Derive(); delete pBase; cout << "delete pDerive" << endl; Derive *pDerive = new Derive(); delete pDerive; return 0;}

运行结果:

代码二、

#include 
using namespace std;class Base{public: Base(){}; virtual ~Base() { cout << "Base destructor." << endl; };};class Derive : public Base{public: Derive(){}; ~Derive() { cout << "Derive destructor." << endl; };};int main(int argc, char **argv){ cout << "delete pBase" << endl; Base *pBase = new Derive(); delete pBase; cout << "delete pDerive" << endl; Derive *pDerive = new Derive(); delete pDerive; return 0;}

运行结果:

结论:

基类的析构函数是为了,删除指向派生类对象的基类指针时,会调用派生类的析构函数。

只要派生类析构函数被调用,之后必定调用基类的析构函数。

疑问:按照C++的内存布局,虚函数是由放在虚函数表中的函数指针指向的,由函数指针间接调用的。而且派生类中如果定义了虚函数,那么虚函数表中相应存放指向基类虚函数的指针就会被指向派生类虚函数的指针替换。以此实现多态,即用基类指针调用派生类函数。

但是析构函数是特殊呢,因为派生类的析构函数和基类的析构函数并不重名,因此可能不是这样处理的,此处还需要深究。

转载地址:http://vgjqa.baihongyu.com/

你可能感兴趣的文章
Callable,Runnable比较及用法
查看>>
Centos7安装docker-compse踩过的坑
查看>>
细说Nullable<T>类型
查看>>
oracle 插入表数据的4种方式
查看>>
7.Ajax
查看>>
Linux vi/vim编辑器常用命令与用法总结
查看>>
对于 url encode decode js 和 c# 有差异
查看>>
centos rz sz安装
查看>>
mysql 修改列为not null报错Invalid use of NULL value
查看>>
epoll源码分析
查看>>
朱晔和你聊Spring系列S1E4:灵活但不算好用的Spring MVC
查看>>
Java使用Try with resources自动关闭资源
查看>>
china-pub十一周年庆,多重优惠隆重登场,千万别错过哟!
查看>>
HDU 3068 最长回文(manacher算法)
查看>>
获得视频时间总长度的另一种方法
查看>>
某软件大赛编程题(转)
查看>>
二叉树
查看>>
Python featureClass clip Tin
查看>>
.NET基础篇——Entity Framework 数据转换层通用类
查看>>
求旋转数组中的最小值
查看>>