我定义了:
A** mat = new A*[2];
但我该如何删除它呢?使用delete[] mat;
还是delete[] *mat;
?
我定义了:
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;
mat[i] = new A();
),这将需要使用delete mat[i];
而不是delete [] mat[i];
。但你已经接近了解决方法 :) - Sellorio第一个,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;
for() delete[] mat[i];
和delete[] mat;
来释放A** mat
。明白了吗,@matt? - axon
operator()
(正如chris所指出的,我最初推荐的是operator[]
)。 - 0xC0000022Loperator()
实际上是更好的选择。 - chris