析构函数为什么要写成虚函数
来源:互联网 发布:au视频软件下载 编辑:程序博客网 时间:2024/05/29 12:41
#include
class Base
{
public:
private:
} ;
class Derived : public Base
{
public:
private:
} ;
void main()
{
}
输出结果只有:Base::Destruction
以上代码会产生内存泄露,因为new出来的是Derived类资源,采用一个基类的指针来接收,析构的时候,编译器因为只是知道这个指针是基类的,所以只将基类部分的内存析构了,而不会析构子类的,就造成了内存泄露,如果将基类的析构函数改成虚函数,就可以避免这种情况,因为虚函数是后绑定,其实就是在虚函数列表中,析构函数将基类的析构函数用实际对象的一组析构函数替换掉了,也就是先执行子类的虚函数再执行父类的虚函数,这样子类的内存析构了,父类的内存也释放了,就不会产生内存泄露。
注:
1.析构函数其实是一个函数,不论子类还是父类,虽然可能看起来名字不一样。而且析构函数执行过程都是执行子类再到父类。
2.多态的时候一定要将析构函数写成虚函数,防止内存泄露,各个子类维护自己内部数据释放。
- 析构函数为什么要写成虚函数
- C++:析构函数写成虚函数是干什么用的,为什么要这么写?
- C++中析构函数为什么要写成虚函数
- 为什么C++基类析构函数写成虚函数
- 为什么要将一个父类的析构函数写成一个虚函数,和内存泄漏有关,怎么理解?
- 为什么要将一个父类的析构函数写成一个虚函数,和内存泄漏有关,怎么理解?
- 析构函数为什么一定写成虚函数的形式 http://blog.sina.com.cn/s/blog_4b146a9c0100sgyg.html
- 把类的析构函数写成虚函数的用意
- 把类的析构函数写成虚函数的用意
- 基类的析构函数需不需要写成虚函数
- 把类的析构函数写成虚函数的用意
- 【面经笔记】析构函数一般写成虚函数的原因
- C++中析构函数为什么有时候写成虚拟的
- 为什么析构函数是虚函数
- 析构函数为什么是虚函数
- 析构函数为什么要是虚函数
- 为什么析构函数是虚函数
- C++析构函数为什么要为虚函数
- 昂贵的聘礼(单源最短路问题)
- 内存分段和分页的区别
- 内部碎片与外部碎片
- 论C++类对象赋值
- mutable关键字
- 析构函数为什么要写成虚函数
- 结构与联合
- C/C++文件读写
- select与pselect的信号屏蔽
- 高级轮询技术——/dev/poll接口与kqu…
- 套接字和标准I/O
- Java - 包 - 成员访问修饰符
- recvmsg和sendmsg函数
- connect的UDB套接字