我定义:
A** mat = new A*[2];
但我怎样才能删除它?与delete[] mat;
或delete[] *mat;
?
仅当delete[] mat;
您不进行额外分配时。但是,如果您在数组数组中分配了数组,则还需要删除它们:
A** mat = new A*[2];
for (int i = 0 ; i != 2 ; i++) {
mat[i] = new A[5*(i+3)];
}
...
for (int i = 0 ; i != 2 ; i++) {
delete[] mat[i];
}
delete[] mat;
第一个,删除[]垫
第二个将删除数组中的第一个元素指向的内容(如果这真的是你拥有的所有代码,那将什么都不是)它相当于 delete [] mat[0]
此外,如果数组中的指针最终指向您也希望释放的已分配内存,则必须手动删除每个元素。例如:
A** mat = new A*[2];
mat[0] = new A;
mat[1] = new A[3];
那么你需要做:
delete mat[0];
delete[] mat[1];
delete[] mat;