[C++]虚析构函数的好处

如果类中的任何一个函数时虚函数,应该将析构函数变成虚析构函数;原因是

如果析构函数不是虚的话,那么如下例子

#include <iostream>
using namespace std;

class Mammal
{
public:
    Mammal():itsAge(1) { }
    ~Mammal() {cout<<"析构函数"; }
    virtual void Speak() const { cout << "Mammal speak!\n"; }

protected:
    int itsAge;
};

class Dog : public Mammal
{
public:
    void Speak()const { cout << "Woof!\n"; }
};
int main()
{
    Mammal *pMammal = new Dog;
	pMammal->Speak();
	delete pMammal;
	int n;
	cin>>n;
	return 0;
}

这里的析构函数没有虚拟化,当delete pMammal的时候呢,整个对象不能够正确销毁,因为可能是指向了基类的析构函数,这样子只销毁了基类的部分

所以正确的话应该将析构函数变成虚的

作者: 林羽飞扬
出处:http://www.cnblogs.com/zhengyuhong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留作者信息,且在文章页面明显位置给出原文连接

你可能感兴趣的:(C++)