使用动态分配时,()和[]有什么区别?

kim*_*ims -1 c++

我认为在 cpp 中执行动态分配时括号“[]”和“()”是相同的,但此代码打印错误。本来,5 大小的数组应该包含索引 0 到 4,不是吗?我的代码有问题吗?我在cppreference.com上搜索过,没有找到。

#include <iostream>

using namespace std;

int main(void){
    int* p1 = new int[5];
    int* p2 = new int(5);
    p1[4] = 1;
    cout << p1[4]; // no error
    p2[4] = 1;
    cout << p2[4]; // error
}
Run Code Online (Sandbox Code Playgroud)

Nim*_*rod 5

new int[5]构造一个int包含 5 个元素的数组,同时new int(5)构造一个int值为 5 的单个数组。

参考: https: //en.cppreference.com/w/cpp/language/new

  • 我想补充一点:如果您是初学者(或专家),您通常应该使用 std::vector 来表示动态大小的数组,使用 unique_ptr 来表示堆分配的值。然后你就会有 `auto v = std::vector&lt;int&gt;(5); auto ptr = std::make_unique&lt;int&gt;(5);` 也不会泄漏。(你的程序泄漏了。) (3认同)