#include "stdafx.h" #include <iostream> using namespace std; class Base { public: Base(){cout << " Constructor in Base. " << endl;} virtual ~Base(){ cout << " Destructor in Base. " << endl;} }; class Derived:public Base { public: Derived(){cout << " Constructor in Derived. " << endl;} ~Derived(){cout << "Destructor in Derived. " << endl;} }; int _tmain(int argc, _TCHAR* argv[]) { Base *p = new Derived; delete p; return 0; }
輸出: Constructor in Base. Constructor in Derived. Destroctor in Derived. Destroctor in Base.
如果Base中的析構函數,沒有virtual修飾,輸出為: Constructor in Base. Constructor in Derived. Destroctor in Base. 這樣子類Derived中的析構函數沒有執行,會造成內存泄露,因此,如果一個類是其他類的基類,應該將其析構函數聲明為虛析構函數。另外從本例中也可以看出,構造函數、析構函數的執行順序。構造函數,先基類后子類,析構函數,先子類,后基類。