虚析构函数 在什么时候需要将基类析构函数设置成虚函数呢 虚析构函数是为了解决这样的一个问题:基类的指针指向派生类对象,并用基类的指针删除派生类对象。 如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用(这个我有这种说法吗?。。)。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为它会为类增加一个虚函数表,使得对象的体积翻倍,还有可能降低其可移植性。 所以基本的一条是:无故的声明虚析构函数和永远不去声明一样是错误的。实际上,很多人这样总结:当且仅当类里包含至少一个虚函数的时候才去声明虚析构函数。 抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。 #include<iostream> using namespace std; class CBird { public: CBird() { cout << "CBird constructor." << endl; }; //当基类 virtual ~CBird() { cout << "CBird destructor." << endl; }; virtual void fly() { cout << "CBird fly." << endl; }; }; class CLark : public CBird { public: CLark() { cout << "CLark constructor." << endl; }; ~CLark() { cout << "CLark destructor." << endl; }; void fly() { cout << "CLark fly." << endl; } }; int main() { CBird * pBird = new CLark(); pBird->fly(); delete pBird; getchar(); return 0; }