如何在数组中的特定类对象上使用 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.