-1
我有這個類:析構函數錯誤
class A{
private:
int * intArr;
int countInt;
public:
A(){
countInt=0;
}
SetArray(countInt){
intArr=new int[countInt];
}
~A(){
delete []intArr;
}
};
而且我也有這個類:
#define MAX_SIZE 10
class B{
private:
A * Aelements;
public:
B(){
int num;
Aelements=new A[MAX_SIZE];
//reading number from file
//....
//num=something
for(int i=0;i<MAX_SIZE;i++)
Aelements[i].SetArray(num);
}
static void test(){
try{
B b;
//do something...
} //here supposed to call ~A()
catch(){
//handle errors....
}
};
類B
創建A
元素的數組使用A
默認構造函數,然後調用SetArray()
創建int
數組到每個A
元素。
我的問題是:
當我打電話
B::test()
,它不叫~A()
。當try{}
完成時,應調用A
的析構函數。如果我強迫調用它,通過使
~B()
:~B() { delete [] Aelements; //Calling ~A() }
我得到這個消息調用
~A()
(當try{}
完成)後:調試斷言失敗! _BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
如何使用析構函數的正確方法是什麼?
1.爲什麼要調用'A〜()'?你還沒有刪除動態分配的'A'數組。 2.顯示一些導致失敗的代碼。最有可能的是,你需要遵循*三條規則*。 – juanchopanza
對於C++來說,這很多'new'和'delete'。你有沒有考慮過使用標準容器? – Biffen
標準容器是什麼意思? – user3572267