幾個小時後我擺弄着一個內存泄漏問題,事實證明我真的有一些關於虛擬析構函數的基本問題是錯誤的!讓我解釋我的課程設計。虛擬析構函數如何工作?
class Base
{
virtual push_elements()
{}
};
class Derived:public Base
{
vector<int> x;
public:
void push_elements(){
for(int i=0;i <5;i++)
x.push_back(i);
}
};
void main()
{
Base* b = new Derived();
b->push_elements();
delete b;
}
邊界檢查器工具在派生類向量中報告了內存泄漏。我發現析構函數不是虛擬的,派生類析構函數沒有被調用。當我把析構函數虛擬化時,它驚人地得到了修復。即使派生類析構函數未被調用,矢量是否不會自動釋放?這是BoundsChecker工具中的一個怪癖還是我對虛擬析構函數的理解錯誤?
請不要使用HTML格式化您的代碼。選擇並按下'0101'按鈕,將會縮進4個空格。 – Yacoby 2010-04-27 15:31:04
發佈的代碼與Base和派生之間沒有任何關係 – JRL 2010-04-27 15:31:10
@JRL:謝謝。派生來自Base。我已經改變了.. – Prabhu 2010-04-27 15:32:40