int \*array = new int\[n\];这个函数实际上在做什么?

新手上路,请多包涵

我对如何创建动态定义的数组感到困惑:

  int *array = new int[n];

我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组 int?有人愿意解释吗?

原文由 pauliwago 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 932
2 个回答

new 分配存储您请求的对象/数组所需的内存量。在这种情况下,n 个整数。

然后指针将地址存储到这个内存块。

但是要小心,这个分配的内存块不会被释放,直到你通过写来告诉它

delete [] array;

原文由 ANisus 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 C++11 开始,执行此操作的内存安全方法(仍然使用类似的结构)是 std::unique_ptr

 std::unique_ptr<int[]> array(new int[n]);

这会创建一个指向足够大的内存块的智能指针,以容纳 n 整数,当它超出范围时会自动删除自身。这种自动清理很重要,因为它避免了您的代码提前退出并且永远不会到达您的 delete [] array; 语句的情况。

如果您需要一个能够动态调整大小的数组,另一个(可能是首选)选项是使用 std::vector 。当您需要未知数量的空间时,这很好,但它有一些缺点(添加/删除元素的时间非常短)。您可以创建一个数组并向其中添加元素,例如:

 std::vector<int> array;
array.push_back(1);  // adds 1 to end of array
array.push_back(2);  // adds 2 to end of array
// array now contains elements [1, 2]

原文由 Engineero 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题