虚析构函数的一点理解
来源:互联网 发布:王老菊 知乎 编辑:程序博客网 时间:2024/05/16 05:29
千万不要将析构函数和虚函数混淆起来。
不管析构函数是不是虚函数,将析构函数设为虚函数是希望在通过基类指针删除派生类对象时调用派生类的析构函数。
如果析构函数不是虚函数,派生类对象没有Vptr,编译器会调用基类的析构函数(在编译时就确定了)。
这样,用户在派生类析构函数中填写的代码就不会被调用,派生类成员对象的析构函数也不会被调用。不过,派生类对象空间还是会被正确释放的,堆管理程序知道对象分配了多少空间。
#include <iostream>using namespace std;class B{public: B(){ cout<<"B"<<endl; } virtual ~B(){ cout<<"~B"<<endl; }};class D:public B{public: D(){ cout<<"D"<<endl; } virtual ~D(){ cout<<"~D"<<endl; }};int main(){ B *pb=new D; delete pb; return 0;}
输出结果:
B
D
~D
~B
如果将析构函数的virtual关键词去掉,则输出结果为:
B
D
~B
即对象D 没有调用析构函数,没有被析构
- 虚析构函数的一点理解
- 对递归函数的一点小理解
- 函数指针使用的一点理解
- deep_c++::多态,虚函数的一点理解
- 对memset函数的一点理解
- 一点对pipe()函数的理解
- 函数式编程的一点理解
- 对fork()函数的一点理解
- 关于包含纯虚函数的类的一点理解
- 对C#下函数,委托,事件的一点理解
- 对c#中的静态构造函数的一点理解
- java主函数中String[] args的一点理解
- 对哈希表及哈希函数的一点理解
- 对c++拷贝构造函数的一点理解
- 对OpenCV 中cvQueryFrame函数的一点理解
- 对窗口过程函数WndProc()的一点理解
- Cocos2d-x中关于schedule函数的一点理解
- 对OpenCV 中cvQueryFrame函数的一点理解
- [POJ][1007]DNA Sorting
- 豆瓣FM电台Chrome扩展——下载
- C#中的Serializable
- AR Video Demo
- javamail发送邮件
- 虚析构函数的一点理解
- 回发或回调参数无效的解决办法
- svg中动态更改text属性值
- 拷贝构造函数, operator =
- 管理培训生
- 数据结构-线性表-顺序存储结构完整可执行代码
- java客户端向服务端发post请求
- 心不安。没有安全感。
- Android Studio设置主题 和 不支持中文的问题解决方法