为什么在c++中使用数组时要使用动态内存分配[duplicate]

wrrgggsh  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(206)

此问题在此处已有答案

Why aren't variable-length arrays part of the C++ standard?(10个答案)
2天前关闭。
在学习C++中的指针时,我遇到了“数组中的动态内存分配”,我们这样执行:

int *array_ptr {std::nullptr};
size_t size{};
cout<<"Enter the size of the array: "<<endl;
cin>>size;
array_ptr = new int [size];

但我的问题是,我们可以简单地用另一种方法来实现这一点,即:

size_t size{};
cout<<"Enter the size of the array: "<<endl;
cin>>size;
int array [size] {};

第二种方法和第一种方法做的工作是一样的。那么我们为什么要在第一个地方使用第一种方法呢?仅仅是为了保存内存吗?

iovurdzv

iovurdzv1#

有很多原因

  • 这不是 C++ 的标准部分(它有问题)
  • 数据存在于堆栈中,因此其寿命有限(当其声明的函数完成时,其将消失),加上堆栈空间有限(通常为1meg左右)
  • 如果你突然意识到你需要更多的条目会发生什么?2也许你不能事先问用户他们需要多少条目

在c++中最好的解决方案是使用std::vector,这是动态增长的,会自动释放内存,另外它会在调试构建(通常)中为你做边界检查,或者如果你使用at[]操作符。
今天我第一次“使用std::vector

相关问题