【发布时间】:2015-01-27 14:44:18
【问题描述】:
这个问题可能听起来有点奇怪,但我从来没有完全明白为什么我们需要有两种不同的语法来删除 C++ 中动态分配的内存?
例如,
int *p = new int[10];
delete[] p; // why not just delete p;?
在普通的旧 C 语言中,您只需使用 free 函数来释放为指针分配的内存,而不管分配的元素数量如何。当然,C++ 有点复杂,因为它允许类类型调用它们的析构函数等。但是,我认为在 C++ 中使用单一语法删除动态分配的内存没有任何障碍。
决定使用delete和delete[]这两个版本有什么根本原因吗?
不仅如此,如果您使用 delete 而不是 delete[],大多数编译器甚至不会警告您,这会产生未定义的行为。
【问题讨论】:
-
您不是在删除指针,而是在指针上使用
delete[]运算符,这首先是错误的方法
标签: c++ pointers language-lawyer