什么时候要用虚析构函数,举例说明
时间: 2024-01-19 11:03:02 浏览: 66
当一个类中含有一个或多个虚函数时,通常会需要一个虚析构函数。这是因为如果不使用虚析构函数,当一个指向派生类的基类指针被delete时,只会调用基类的析构函数,而派生类的析构函数将不会被调用,从而导致内存泄漏。
举个例子,假设有一个基类Animal和一个派生类Cat,它们都含有虚函数,代码如下:
```
class Animal {
public:
virtual void makeSound() {
cout << "Animal sound" << endl;
}
~Animal() {
cout << "Animal destructor" << endl;
}
};
class Cat : public Animal {
public:
void makeSound() override {
cout << "Meow" << endl;
}
~Cat() {
cout << "Cat destructor" << endl;
}
};
```
如果我们使用下面的代码删除一个指向Cat对象的Animal指针,会发生什么呢?
```
Animal* animal = new Cat;
delete animal;
```
由于Animal类的析构函数不是虚函数,只会调用Animal的析构函数,而不会调用Cat的析构函数,导致Cat对象的内存没有被正确释放,造成内存泄漏。如果Animal类的析构函数是虚函数,那么Cat对象的析构函数就会被正确调用,从而避免了内存泄漏。
阅读全文