c++ 虚析构函数
2016-07-05 22:47
417 查看
class Base1 { public: Base1() { cout << "Base1::Base1 1"<<endl; }; Base1(int i, int j) :i(i), j(j) { cout << "Base1::Base1 2"<<endl ; }; ~Base1() { cout << "Base1::~Base1"<<endl; } void basemem() { cout << i <<","<< j<<endl; }; protected: int i; private: int j; }; struct public_derived : public Base1 { public: public_derived() { cout << "public_derived::public_derived 1" << endl; }; public_derived(int i, int j, int k) : Base1(i, j), k(k) { cout << "public_derived::public_derived 2" << endl; }; int use_base() { return i; } ~public_derived() { cout << "public_derived::~public_derived" << endl; }; protected: int k; };
public_derived d2(5,7,8);
直接定义对象,在超出对象的范围时,会先自动调用派生类的析构函数再调用基类的析构函数;
若基类析构函数不是虚函数,则当基类指针或引用指向动态生成的派生类对象,并通过该指针delete该对象时,派生类的析构函数并不会执行,为了派生类析构函数执行,基类的析构函数需要声明为虚函数;
Base1 *bp;
bp = new public_derived(5, 7, 8);
delete bp;
相关文章推荐
- POJ 1330 Nearest Common Ancestors
- C++类中的static数据成员,static成员函数
- C++ typedef用法小结
- 动态规划--背包问题
- C++标准库和标准模板库
- 关于C语言给变量分配地址
- C++11中auto的使用
- C++11中auto的使用
- C--有关内存的思考
- 提高项目23-有序数组中插入数据(函数版)
- C++语言实现螺旋队列
- C++ basic 02: 文件输入和输出
- 提高项目22-成绩处理函数版 (参数)
- C++的iostream标准库介绍
- C++ 成员函数的重载、覆盖与隐藏
- C++ 创建快捷方式的最简单方法
- C++编程规范
- C++面试题( 收集并整理)
- C++二进制文件写操作
- Counting Bits