0
点赞
收藏
分享

微信扫一扫

C++ 虚析构函数必要性

这是一篇关于讲解关于虚析构函数必要性的问题。

1.为什么需要虚析构函数

有如下示例代码
````c++
#include <iostream>
using namespace std;
class Base {
public:
explicit Base() {

}
~Base() {
    cout << "父类析构函数" << endl;

}

public:
int data = 100;
};

class Derive :public Base {
public:
explicit Derive() {
array = new int[10];
for (int i = 0; i < 10; i++) {
array[i] = i;
}
}
~Derive() {
cout << "子类析构函数" << endl;
delete[]array;
}
private:
int* array;

};
int main() {

Base* d = new Derive;       //父类指针指向子类对象

delete d;           //删除子类对象

system("pause");
return 0;

}


> 运行上述代码,可知,当删除子类对象d时,只执行了父类的构造函数而未执行子类析构函数,会导致内存泄露。将上述父类的析构函数
> 声明为虚析构函数,则在发生父类指针指向子类对象时,删除子类对象,会先执行子类的析构函数再执行父类的析构函数,避免内存泄露。

> \- [注意] **虚析构函数存在意义:在发生父类指针指向子类对象时,当子类对象生命完结时,虚析构函数可以保证子类正确析构而不会发生内存泄露**
> \- [注意] **在编写需要被继承的类的时候,基类析构函数如无特殊需求,尽可能编写为虚析构函数,避免内存泄露**
举报

相关推荐

0 条评论