音樂蟲子
Posted @ 2006-05-03 23:42
更正摟主的一個說法,“鏈式調用”不是virtual才可以的,析構函數本來就是鏈式調用!正確的說法是virtual的析構函數和一般的virtual函數一樣,使得調用的是真正對象的函數。
例子代碼演示就算析構函數不是virtual的情況下,派生類和基類的析構函是依然被鏈式調用了。但是,當指針是base的時候它不能從正確的析構函數開始:
using namespace std;
class Base
{
public:
~Base()
{
cout << "base\n";
}
};
// derived class
class Derived : public Base
{
public :
~Derived()
{
cout << "derived\n";
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Derived* d = new Derived;
delete d;
Base* b = new Derived;
delete b;
return 0;
}
把基類修改成:
class Base
{
public:
virtual ~Base()
{
cout << "base\n";
}
};
之后,就可以正確從派生類(真正的對象)開始調用析構函數
回復更多評論