虚析构函数的作用
来源:互联网 发布:网络群众路线 编辑:程序博客网 时间:2024/05/18 02:16
析构函数的作用就在于我们调用完一个类对象时,为了避免内存泄漏,我们必须删除这个类对象,这时析构函数就派上用场了。
但是,当我我们定义一个基类指针指向派生类后,再删除这个指针时我们会发现,程序只是调用了基类的析构函数,却没有调用派生类的析构函数。为了解决这个问题,虚析构函数闪亮登场!当!当!当!
虚析构函数只是在析构函数前面加上了一个virtual而已,下面,我们通过程序来理解下,过程吧。
class Base { //基类public:Base() {} ~Base() {cout << "Successfully delete A!" << endl;}virtual void go() {cout << "父类" << endl;}};class Derive :public Base { //派生类public: Derive() {}~Derive() {cout << "Successfully delete B!" << endl;}void go() {cout << "子类" << endl;}};void main() { Base *p2 = new Derive; p2->go(); delete p2; system("pause");}上面的基类的析构函数并没有被virtual声明:运行结果如下我们可以看到,上述程序只调用了基类的析构函数,这样派生类没有被删除,容易导致内存泄漏。我们修改下程序
class Base { //基类public:Base() {} virtual ~Base() {cout << "Successfully delete A!" << endl;}virtual void go() {cout << "父类" << endl;}};class Derive :public Base { //派生类public: Derive() {}~Derive() {cout << "Successfully delete B!" << endl;}void go() {cout << "子类" << endl;}};void main() { Base *p2 = new Derive; p2->go(); delete p2; system("pause");}再来看结果:
嗯,成功调用派生类的析构函数啦!
0 0
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 虚析构函数的作用
- 200. Number of Islands
- C++11 lambda函数
- SQL查询
- 51单片机定时计数器
- matlab实现滑动平均滤波(二)
- 虚析构函数的作用
- 使用Android studio问题,工程路径含中文字报错
- C语言也有大学问——详解交换两个数
- 面试问题总结
- Android动画--布局动画 LayoutAnimation
- 重构基于Yeoman脚手架生成的Express项目
- 关于node安装bower问题
- 1
- 2