【发布时间】:2025-12-27 17:20:12
【问题描述】:
在 C++ 中,下面代码中的指针 p 和 q 有什么区别吗?
int* p = new int;
int* q = new int[5];
我知道一个为单个 int 分配新内存,第二个为一个 5 个 int 的数组分配内存,但从根本上说,指向单个 int 的指针和指向 int 数组的指针之间有什么区别吗?
我有这个疑问是因为我读到必须使用 delete[] q 来释放 q 指向的内存,但对于 p 指向的单个 int 只使用 delete p。
如果我使用delete q会怎样?
【问题讨论】:
-
草率地说,
delete对指针本身并没有多大作用,而是对它指向的东西做太多事情,删除int与删除整数数组不同 -
有些实现会在指针返回之前的地址中跟踪数组的分配大小。这是标准未定义的实现细节。但是,您必须记住使用正确的删除形式。
-
@drescherjm 我想过这样的事情,但我不确定编译器如何找到分配的大小。你能给我指点这方面的更多信息吗?
-
我没有很好的参考。这个答案更多地谈到了它是如何工作的:*.com/a/1913393/487892
-
@drescherjm 您的答案比当前答案提供的信息更多,所以如果可以,请将其写为答案,以便我将其标记为已接受并关闭问题。
标签: c++