c++ 虚析构函数
2011-10-19 11:31
246 查看
#include <iostream>
using namespace std;
class base
{
public:
base()
{
}
base(int _name)
{
name = _name;
malloc_buf = NULL;
}
/*这里的父类虚析构函数,是让子类的析构函数也是虚函数。在动态绑定时将执行实际类型的析构函数,以保证执行适当的析构。
一个场景是:父类的析构函数的虚析构,父类引用绑定子类对象或指针指向子类对象:如果delete该引用或指针,这个delete将执行子类的析构函数,
当然它也必将调用父类的析构。但是它绝对不是只调用父类的析构函数
*/
virtual ~base()
{
cout << "调用基类析构函数" << endl;
}
private:
int name;
char *malloc_buf;
};
class sub : public base
{
public:
sub(int _name)
{
name = _name;
}
~sub()
{
cout << "调用父类析构函数" << endl;
}
private:
int name;
};
int main()
{
sub* sb = new sub(1);
if(NULL != sb)
{
delete sb;
}
}
using namespace std;
class base
{
public:
base()
{
}
base(int _name)
{
name = _name;
malloc_buf = NULL;
}
/*这里的父类虚析构函数,是让子类的析构函数也是虚函数。在动态绑定时将执行实际类型的析构函数,以保证执行适当的析构。
一个场景是:父类的析构函数的虚析构,父类引用绑定子类对象或指针指向子类对象:如果delete该引用或指针,这个delete将执行子类的析构函数,
当然它也必将调用父类的析构。但是它绝对不是只调用父类的析构函数
*/
virtual ~base()
{
cout << "调用基类析构函数" << endl;
}
private:
int name;
char *malloc_buf;
};
class sub : public base
{
public:
sub(int _name)
{
name = _name;
}
~sub()
{
cout << "调用父类析构函数" << endl;
}
private:
int name;
};
int main()
{
sub* sb = new sub(1);
if(NULL != sb)
{
delete sb;
}
}
相关文章推荐
- C/C++中的虚析构函数和私有析构函数的使用
- C++【浅谈虚析构函数】
- C++ 虚析构函数
- c++之——虚析构函数
- c++析构函数、虚析构函数、纯虚析构函数详解
- C++中的new与delete与虚析构函数的关系的实验研究
- c++ primer plus阅读笔记13---虚函数 为什么要虚析构函数?
- [C++ rudiment]虚析构函数
- 【C/C++】虚析构函数
- C++学习笔记:虚析构函数
- C++ 虚析构函数
- C++虚析构函数、纯虚析构函数
- c++只在基类中用虚析构函数的原因
- C++ 虚析构函数的用法
- 关于C++虚析构函数
- C++ 虚析构函数
- C++虚析构函数的使用(可能造成内存泄露问题)
- C++之虚析构函数
- 从零开始学C++之虚函数与多态(一):虚函数表指针、虚析构函数、object slicing与虚函数、C++对象模型图
- C++基础---虚析构函数与纯虚析构函数