如何在数组中的特定类对象上使用delete来仅删除该对象而不是整个数组?
这个对象无论在数组的末尾都是什么,所以移动数组中的其他对象也无关紧要
编辑:
为了使它更清晰,我只想释放数组的最后一个元素供以后使用。
答案 0 :(得分:4)
如果需要,您应该使用std::vector
而不是常规数组。使用std::vector
,删除和销毁最终元素是通过pop_back
方法完成的。
如果绝对必须使用常规数组,并且必须立即销毁数组中的一个对象,则可以放置 - 销毁该对象,然后在其位置构造一个新对象。如果您不确定这意味着什么或如何做,您可能应该使用std::vector
代替。
答案 1 :(得分:1)
如果要将数组的最后一个元素复制到其他位置,只需执行该操作,然后忽略最后一个元素。你无法删除它。通常你有一个计数器变量,它保存当前在数组中的元素数量。因此,当您“删除”最后一个元素时,只需将该计数器减1即可。
仅供参考,std::vector
的工作原理完全相同。 (无论如何,你应该使用std::vector
开始。)
答案 2 :(得分:1)
使用new[]
指令分配的数组只能使用delete[]
指令释放。释放部分或整个数组(free
,delete
等)的任何其他尝试都是未定义的行为。
如果您希望能够释放数组中的特定元素,那么最好选择使用stl容器,例如std::vector
,std::list
,std::set
,std::map
每个都有不同的属性,适用于不同的任务,但都支持快速删除元素(vector
除外,它只支持最后一个元素的“快速”删除,但因为这正是你想要的那么它的a好的选择)并且事实上“隐藏”了你的元素分配。
答案 3 :(得分:0)
如果数组是
object* array = new object[n];
然后你无法删除它的元素。您可以使用memcpy()
移动元素,但不能更改数组的大小。
在数组项上使用new
或delete
将导致大多数情况下堆损坏。建议您使用std::vector
。
如果数组是指向对象的指针数组,那么你可以delete
指向一个对象,但你不能删除指针本身(参见本答案的第一部分)。
编辑:问题作者的评论指出他想删除指针数组的最后一个元素。
您可以将最后一个指针设置为0并检查:
pointers[size - 1] = 0;
// later, when using the array
if(pointers[i]) // do smth
使用std::vector
会更容易。此外,如果删除的频率很高,则应考虑使用std::list
。