解除对象的指针数组?

时间:2010-11-13 03:47:59

标签: c++ pointers memory-management

考虑以下情况:

Class** array = new Class*[8];
array[1] = new Class(1,2);

只是做“delete[ ] array”足够,或者我应该在前者之前加上“delete array[1]”。我对内存管理并不十分满意。

2 个答案:

答案 0 :(得分:5)

每次调用new[]时,都必须在指向解除分配的指针上调用delete[]。每次拨打new时,都必须拨打delete

在您的情况下,您拨打new两次。 array[1]包含指向使用new分配的类的指针,因此必须使用delete取消分配。 array是指向使用new[]分配的数组的指针,因此必须使用delete[]释放它。

当然,你可以通过简单地声明这样的数组来节省你自己的头痛:

Class array[8];
array[1] = Class(1,2);

没有动态内存分配意味着无需调用delete

或使用std::vector

std::vector<Class> array(8);
array[1] = Class(1,2);

答案 1 :(得分:0)

如果你创建了类{em> Class 的vector个对象,并假设sizeof(Class)超过4个字节,那么vector将会复制它浪费记忆。相反,请考虑使用指向Class对象的指针向量,这将始终创建与4 * 8 = 32无关的sizeof(Class)字节的内存。