-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