我对如何创建动态定义的数组感到困惑:
int *array = new int[n];
我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组 int?有人愿意解释吗?
原文由 pauliwago 发布,翻译遵循 CC BY-SA 4.0 许可协议
我对如何创建动态定义的数组感到困惑:
int *array = new int[n];
我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组 int?有人愿意解释吗?
原文由 pauliwago 发布,翻译遵循 CC BY-SA 4.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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
2 回答571 阅读✓ 已解决
1 回答403 阅读✓ 已解决
2 回答920 阅读✓ 已解决
1 回答420 阅读
1 回答328 阅读✓ 已解决
new 分配存储您请求的对象/数组所需的内存量。在这种情况下,n 个整数。
然后指针将地址存储到这个内存块。
但是要小心,这个分配的内存块不会被释放,直到你通过写来告诉它