考虑以下情况:
Class** array = new Class*[8];
array[1] = new Class(1,2);
只是做“delete[ ] array
”足够,或者我应该在前者之前加上“delete array[1]
”。我对内存管理并不十分满意。
答案 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)
字节的内存。