1、当一个类被用来作为基类的时候,才会把析构函数写成虚函数 --注意是基类
样例:没有基类
class CBase
{
public:
CBase(){
OutputDebugStringA("CCBase\n");
}
//基类没有声明virtual
~CBase(){
OutputDebugStringA("~CCBase\n");
}
private:
int number;
};
class CTest:public CBase {
public:
CTest():CBase(){
OutputDebugStringA("CCTest\n");
}
~CTest() {
OutputDebugStringA("~CCTest\n");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
CTest* objTest = new CTest;
CBase* p = objTest;
delete p; //只输出:~CCBase
return 0;
}
从上面样例知道,在析构的时候在CBase 的虚函数表里面找不到虚构函数,说明它不会进行多态处理,只析构的基类。如果CBase的析构函数加上virtrual关键字,那么先打印~CTest,然后打印~Cbase。