C++之虚析构函数
2017-04-03 11:52
162 查看
//虚析构函数 /* 如果一个类有子类,则这个类(父类)的析构函数必须是虚函数 如果父类的析构函数不是虚函数,则当(delete)删除一个指向子类对象的父类指针 时,将调用父类版本的析构函数,子类只释放了来自于父类的那部分成员变量, 而子类自己扩展的成员变量没有被释放,造成内存泄漏 */ #include "stdafx.h" #include<stdlib.h> #include<iostream> using namespace std; class Base { public: Base(){} virtual~Base() { cout << "Base destructor " << endl; } }; class Derived :public Base { public: Derived(){} ~Derived() { cout << "Derived destructor!" << endl; } }; int main() { //Derived d;//在栈区 Base *p = new Derived();//在堆区声明一个子类对象,父类指针指向子类堆空间 delete p;//回收,在父类析函数不是虚函数的情况下,只调用父类析构函数,子类只释放了继承于父类的成员 //将父类的析构函数声明称虚函数之后,析构时,由于是在栈上进行回收,因此先析构子类,再析构父类 //子类构造时,先调用父类构造函数,再调用子类构造函数 system("pause"); return 0; }
相关文章推荐
- C++中的虚析构函数
- 跟风C++主题年:从虚析构函数想到的内存基本模型
- C++虚函数的实现细节、虚析构函数 汇编解析
- C++虚析构函数
- C++继承中的虚析构函数
- c++基类不为虚析构函数的一个风险
- c++ virtual 虚析构函数 资源释放的讨论
- C++继承中构造函数、析构函数调用顺序及虚析构函数
- C++中 虚函数 虚析构函数的作用
- C++中的虚析构函数
- c++继续学习 virtual Destruct function (虚析构函数)
- 关于C++虚析构函数
- c++面向接口编程,虚函数,虚析构函数
- 关于c++虚析构函数
- C++中的虚析构函数
- C++中,什么是纯虚函数,什么是抽象类,什么是虚析构函数
- C++中的虚析构函数
- c++只在基类中用虚析构函数的原因
- C++的虚析构函数
- C++虚析构函数