最近我读了很多关于排序算法的文章,我发现了让我感到困惑的奇怪之处。在函数中,它需要在for循环中创建一个临时数组。示例代码是
for(;;)//ignore the condition
{
int *b = new int[N];
//some code
delete b[];
}
问题是:为什么不在没有new运算符的情况下直接创建它,因为编译器会自动销毁它并在每次迭代后释放内存。就像在循环中写这个
int b[N];
在前面,我总是使用这个方法来创建临时类型/对象。我完全错了或类似数组的内容与内置类型不同?
那么,Stack Overflowers,有人能给我一些建议吗?
为什么不在没有new运算符的情况下直接创建它,因为编译器会自动销毁它并在每次迭代后释放内存。
的确,为什么不呢?
如果在编译时知道N
,那么继续使用int b[N]
。
如果在编译时不知道N
,那么应该使用std::vector<int>
代替:
for(;;)//ignore the condition
{
std::vector<int> b(N);
//some code
}
您应该向代码的作者询问为什么他或她使用new[]
和delete[]
,但可能只是缺乏经验。
如果N
在编译方式中已知,请使用
int b[N];
很好。如果您能够使用C ++ 11编译器,则使用std::array
是另一种选择。
std::array<int, N> b;
如果在编译时不知道N
,请使用
int b[N];
是非标准的。它仅受某些编译器的支持作为扩展。
如果在编译时不知道大小,请使用std::vector
而不是在应用程序代码中管理动态分配的内存。没有使用std::vector
的明智理由。
for(;;)//ignore the condition
{
std::vector<int> b(N);
//some code
// No need for this at all.
// delete b[];
}
为什么不在没有new运算符的情况下直接创建它,因为编译器会自动销毁它并在每次迭代后释放内存。
根据堆栈的大小和临时数组的大小,您可能希望使用动态内存创建阵列,这样就不会破坏堆栈(耗尽堆栈内存)。
当然,矢量是比阵列更好的选择,因为它已经被提到过了。