关于虚拟析构函数
2005-10-22 22:07
323 查看
什么时候才应该将析构函数定义为虚拟呢?当类至少拥有一个虚拟函数时。拥有虚拟函数意味着一个类是派生类的接口,在这种情况下,一个派生类的对象可能通过一个基类指针来销毁。
如果基类的析构函数不是虚拟的,那么派生类的析构函数将不会被调用。
#include <iostream>
using namespace std;
class A
{
public:
A(){
cout << "A construction" << endl;
}
virtual ~A() //注意这里
{
cout << "A destruction" << endl;
}
};
class B: public A{
public:
B(){
cout << "B construction" << endl;
}
~B(){
cout << "B destruction" << endl;
}
};
void main(){
{
B pg;
}
cout << "---------------------------" << endl;
{
A *pe = new B( );
delete pe;
}
}
程序运行结果:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
B destruction
A destruction
如果去掉 virtual 结果为:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
A destruction
如果基类的析构函数不是虚拟的,那么派生类的析构函数将不会被调用。
#include <iostream>
using namespace std;
class A
{
public:
A(){
cout << "A construction" << endl;
}
virtual ~A() //注意这里
{
cout << "A destruction" << endl;
}
};
class B: public A{
public:
B(){
cout << "B construction" << endl;
}
~B(){
cout << "B destruction" << endl;
}
};
void main(){
{
B pg;
}
cout << "---------------------------" << endl;
{
A *pe = new B( );
delete pe;
}
}
程序运行结果:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
B destruction
A destruction
如果去掉 virtual 结果为:
A construction
B construction
B destruction
A destruction
---------------------------
A construction
B construction
A destruction
相关文章推荐
- 关于类的虚拟析构函数、纯虚拟析构函数
- 一个关于虚拟析构函数测试
- 关于虚拟主机的数据库如何备份
- 一个简单关于学生成绩管理的C++程序代码,但是对于拷贝析构函数目前还是不知其作用何在
- 关于android系统虚拟按键
- 关于TOMCAT主目录与虚拟目录的配置介绍
- 关于虚拟空间上传没有权限问题 只要更改一下system.web 就可以
- 关于C++中的虚拟继承的一些总结
- 关于虚拟主机的数据库如何备份
- 关于Pyhton虚拟环境
- 关于Nginx+PHP的虚拟主机目录权限控制的探究
- 关于C++中的虚拟继承的一些总结
- 关于沉浸模式 状态栏颜色 底部虚拟键相关
- 关于虚拟主机的小问题
- 关于 KVM 虚拟网络配置 NAT 与 Bridge
- 关于构造函数析构函数和异常的一点点
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- 关于析构函数和纯虚函数
- 关于虚拟的Desktop的编程
- 浅谈关于Python3中venv虚拟环境