为虚函数,什么情况下需要将析构函数定义为虚函数?
来源:互联网 发布:windows whistler 2257 编辑:程序博客网 时间:2024/05/03 04:22
首先要明确:
1.每个析构函数(不加 virtual) 只负责清除自己的成员。
2.可能有基类指针,指向的确是派生类成员的情况。(这是很正常的),
那么当析构一个指向派生类成员的基类指针时,程序就不知道怎么办了。
所以要保证运行适当的析构函数,基类中的析构函数必须为虚析构。
基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。所以,将析构函数声明为虚函数是十分必要的。
示例代码:
1.第一段代码
#include<iostream>
using namespace std;
class ClxBase{
public:
};
class ClxDerived : public ClxBase{
public:
};
运行结果:
Do something in class ClxDerived!
Output from the destructor of class ClxDerived!
Output from the destructor of class ClxBase!
2.第二段代码
#include<iostream>
using namespace std;
class ClxBase{
public:
};
class ClxDerived : public ClxBase{
public:
};
输出结果:
Do something in class ClxBase!
Output from the destructor of class ClxBase!
3.第三段代码:
#include<iostream>
using namespace std;
class ClxBase{
public:
};
class ClxDerived : public ClxBase{
public:
};
运行结果:
Do something in class ClxDerived!
Output from the destructor of class ClxDerived!
Output from the destructor of class ClxBase!
- 为虚函数,什么情况下需要将析构函数定义为虚函数?
- 为什么析构函数可以为虚函数,什么情况下需要将析构函数定义为虚函数?
- C++:什么情况下需要将析构函数定义为虚函数?
- 什么情况下析构函数需要定义为虚函数?
- 析构函数是否必须为虚函数?什么情况下才应该定义析构函数为虚函数?
- c++ 什么情况下需要将基类的析构函数声明为虚函数
- 析构函数什么情况下要定义为虚函数?
- 析构函数什么情况下要定义为虚函数
- 析构函数什么情况下要定义为虚函数?
- 析构函数什么情况下要定义为虚函数?
- 析构函数什么情况下要定义为虚函数?
- 析构函数什么情况下要定义为虚函数?
- 析构函数什么情况下要定义为虚函数?
- 什么函数不能声明或定义为虚函数
- C++的析构函数需要定义为虚函数
- 什么时候析构函数需要定义为虚函数
- 什么情况下,类的析构函数应该声明为虚函数?
- 什么情况下,类的析构函数应该声明为虚函数?
- Java运算符与表达式
- lwip中ip层的实现浅析
- 计数排序的分析与实现
- SQLite Exception, Database Already Closed
- 后缀数组
- 为虚函数,什么情况下需要将析构函数定义为虚函数?
- UVa 10759 Dice Throwing (概率DP)
- NSUserDefaults standardUserDefaults的使用
- 下拉列表级联操作
- 嵌入式面试之经典基础题
- 详解数据库设计三大范式
- 关于连接无密码的wifi问题
- 新手的ubuntu学习笔记,持续更新
- 数据库删除重复数据