在简单的一维数组中:
node *nodes = new node[MAX_NODES];
删除:
delete [] nodes;
删除数组中分配的所有节点。
但在这种情况下:
float (*buildingArray)[3] = new float[10][3];
这句话是否使buildingArray
为3个浮点指针的单维数组?这是解除分配线:
delete[] buildingArray;
上面是否重新分配delete
数组,但是我怀疑它是否会删除它的引用?
答案 0 :(得分:16)
上述取消分配会删除数组吗?
是的。
只需遵循以下规则:
您需要分别致电delete
或delete []
或new
。
如果你有一个指针数组,每个索引都分配了动态内存,你需要显式循环它并显式释放每个数组元素。
另外,您最好使用new []
或std::vector
而不是动态分配的数组。
答案 1 :(得分:3)
是的。解释是因为内存中没有关于数组维数的信息。
如果您有一个3 * 4项数组,它与12项数组完全相同。这就是你解决变化的特定元素(以行后方式存储)的方式。
所以delete[]
会完美运作。
但是使用new
和delete
运算符的日期并不常见smart pointers,除非你真的有充分的理由自己控制分配。
答案 2 :(得分:2)
new float[10][3]
分配一个包含10个3 floats
数组的数组,并返回指向第一个元素的指针(这是一个包含3个浮点数的数组)。
在此指针上调用delete[]
会导致整个数组被删除。
两种情况的唯一区别在于,在第一种情况下,存储在动态分配的数组中的值的类型是float
,在第二种情况下,类型是float[3]
。