虚析构函数的实现原理
来源:互联网 发布:淘宝怎么加好友 编辑:程序博客网 时间:2024/05/19 18:47
虚析构函数的理论前提是
执行完子类的析构函数,那么父类的虚构函数必然会被执行。
那么当用delete释放一个父类指针所实例化的子类对象时,如果没有定义虚析构函数,那么将只会调用父类的析构函数,而不会调用子类的虚构函数,导致内存的泄漏。
Class Shape{public: virtual Shape(); ~Shape();private: int m_ir;};Class Circle:public Shape{public: Circle(); ~Circle();private: int m_ir;};int main(){ Shape *shape=new Circle; delete shape; shape=NULL;}
如果基类中定义了虚析构函数,那么在Shape的虚函数表中就会存放虚析构函数的地址
而编译器会自动帮派生类的析构函数前加上virtual关键字。
那么实例化Circle时,在Circle的虚函数表中也会存放Circle的虚析构函数的地址。在执行delete shape时,在Circle的虚函数表中找到虚析构函数的地址,执行析构函数,释放派生类占用的内存,而派生类的析构函数被调用那么基类的析构函数也会自动被调用。
0 0
- 虚析构函数的实现原理
- 虚函数和虚析构函数的实现原理
- printf 函数的实现原理
- poll函数的实现原理
- printf 函数的实现原理
- printf 函数的实现原理
- printf函数的实现原理
- rand函数的实现原理
- 虚函数的实现原理
- 函数重载的实现原理
- C++的虚函数的实现原理
- 虚函数和虚析构函数的实现原理--虚函数表
- C++虚函数的原理及实现
- SendMessage、PostMessage函数的实现原理
- 汇编-------函数传参的实现原理
- 变参函数的实现原理
- C++实现函数重载的原理
- C++虚函数的原理及实现
- 栈的压入、弹出序列
- iOS 投机流实现 无限轮播图
- 学习笔记 Tianmao 篇 FragmentTabHost (TabHost升级版)
- hdu 4507 吉哥系列故事——恨7不成妻
- 枚举
- 虚析构函数的实现原理
- rlwrap - sqlplus 命令行缓存工具
- 斐波那契数列
- 有些命令
- nodejs + express + ejs + mongodb 一个非常简单的前后端开发的实例3
- java对properties配置文件的读写操作
- 如何让容器处理系统异常
- wampserver配置多站点
- java中多线程和主线程执行run和start的先后