有问题的代码:
void deleteForMe(int* pointer) { delete[] pointer; }
如果指针未指向,则具有未定义的行为一个数组,因为它盲目地执行了delete[]操作。但是,当指针引用数组时,如:
int main() { int* arr = new int[5]; deleteForMe(arr); return 0; }
操作系统以某种方式知道只删除指定的数组元素,而不继续超出它们。
此行为的关键在于C 作为 C 兼容语言的历史根源。为了避免给不使用数组的程序员带来不必要的开销,引入了delete[]语法。
进行非数组分配时,如:
Foo* foo = new Foo;
没有额外的数组支持会产生开销。然而,对于数组分配,这种开销确实存在。为了指示运行时库应该使用此信息,程序员必须为数组指针指定delete[]。
因此,delete 和delete[] 之间的选择基于要删除的特定分配。这允许更细粒度的内存管理,并符合 C 的极简主义哲学。
以上是`delete[]` 如何知道要从数组中删除多少个元素?的详细内容。更多信息请关注PHP中文网其他相关文章!