如何在数组中的特定类对象上使用 delete 来仅删除该对象而不是整个数组?
这个对象将不管在数组的末尾是什么,因此移动数组中的其他对象也无关紧要
编辑:
为了更清楚,我只想释放数组的最后一个元素以供以后使用。
如何在数组中的特定类对象上使用 delete 来仅删除该对象而不是整个数组?
这个对象将不管在数组的末尾是什么,因此移动数组中的其他对象也无关紧要
编辑:
为了更清楚,我只想释放数组的最后一个元素以供以后使用。
std::vector
如果您需要这样做,您应该使用而不是常规数组。使用std::vector
,删除和销毁最终元素是通过该pop_back
方法完成的。
如果您绝对必须使用常规数组,并且必须立即销毁数组中的一个对象,则可以放置-销毁该对象,然后在其位置构造一个新对象。如果您不确定这意味着什么或如何做,您可能应该std::vector
改用它。
用指令分配的数组new[]
只能用delete[]
指令释放。free
任何其他释放部分或整个数组(等)的尝试delete
都是未定义的行为。如果您希望能够释放数组中的特定元素,那么您最好考虑使用 stl 容器,例如std::vector
, std::list
,std::set
等std::map
。每个都有不同的属性并且适用于不同的任务,但都支持快速删除元素(除了vector
它只支持最后一个元素的“快速”删除,但因为这正是你想要的,所以它是一个不错的选择)并且实际上为你“隐藏”了元素的分配。
如果要将数组的最后一个元素复制到其他地方,只需执行此操作,然后忽略最后一个元素。您无法删除它。通常,您在某处有一个计数器变量,用于保存当前数组中的元素数量。因此,当您“删除”最后一个元素时,只需将该计数器减 1。
仅供参考,std::vector
工作方式完全相同。(无论如何,你应该std::vector
开始使用。)
如果数组像
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
.