C++中基类中应该有虚析构函数
来源:互联网 发布:php返回数据格式 编辑:程序博客网 时间:2024/06/10 16:30
当一个类中一旦有虚函数的时候,这个类的内存空间就会维护一张虚函数表,这张虚函数表会浪费类所占用的内存空间,同时虚函数是运行时多态,一旦函数被调用的次数非常多,就会产生性能的瓶颈,一般在数据库中的物理算子的实现中,会有这种情况的发生,因为数据库所处理的数据条数有时候是很多的。
但是如果一个基类的析构函数如果不是虚函数,我们看会发生什么事情。
#include <iostream>using namespace std;class A{public:A(){};virtual ~A(){};void check(){cout<<"check in A"<<endl;};};class B:public A{public:B(){};~B(){cout<<"B will be destroyed"<<endl;};};int main(){A *a=new B();a->check();delete a;return 0;}
运行结果为:
check in A
B will be destroyed
但是如果你去掉virtual ~A()的virtual,出现的结果是:
check in A
这说明如果基类中的析构函数如果不是虚函数,子类中的析构函数就不会被执行,这样就可能导致内存泄露的风险,如果你在子类中的析构函数中做了更多的事情,就可能会有更严重的后果。
0 0
- C++中基类中应该有虚析构函数
- android开发应该学点C++(常用数学函数)
- 【c语言】 编写递归函数,函数应该和下面的函数原型匹配:int hermite(int n,int x))
- c 语言中fread()函数使用时应该注意的地方
- 【C语言应该注意的那些事】之 一 :函数式宏定义
- C++:在构造函数中使用new时应该注意的事项
- c++(重载、覆盖、隐藏)&&什么情况下,类的析构函数应该声明为虚函数?为什么?
- linux一个c文件要引用另一个c文件中的函数编译的时候,应该怎么编译?
- 应该收集的PHP函数
- C初学者应该怎么走?
- C 应该注意的地方
- 学C了,应该认真
- [C++] 应该如何应对OOM?
- 应该知道的c知识点
- c语言应该怎么学
- c语言应该怎么学
- [C/C++]C函数
- Openssl函数i2d_X509应该注意的地方
- Android AIDL使用详解
- Oracle对SQL语句处理过程
- POJ-2965-The Pilots Brothers' refrigerator-2013-12-05 11:18:12
- 推荐一款安卓软件:爱家定位,及时定位知道老人和小孩的位置防走失
- 我理解的逻辑地址、线性地址、物理地址和虚拟地址
- C++中基类中应该有虚析构函数
- 2014.1.11 【数据库】约束
- 黑马程序员------------------集合
- Android中用广播从Service中向Activity发送信息
- 【JS】全局对象(全局作用域) 内置对象挂到全局对象上,全局对象本身也挂到全局对象
- 文件系统实时监控
- 破解sketch for mac
- 黑马程序员——Collections类 Arrays类
- POJ-1328-Radar Installation-2013-12-07 01:49:28