peu*_*gas 1 c++ memory-management dynamic
在循环中动态分配内存的最佳方法是什么?
1.每个循环都没有内存吗?
int *foo;
for(int i=1;i<10;i++)
{
foo = new int [i];
/*
...
*/
delete foo;
}
Run Code Online (Sandbox Code Playgroud)
要么
2.到底免费记忆?
int *foo;
for(int i=1;i<10;i++)
{
foo = new int [i];
/*
...
*/
}
delete foo;
Run Code Online (Sandbox Code Playgroud)
Som*_*ude 10
首先,当您使用new[]运算符时,您需要将其与delete[]运算符匹配,因此您应该这样做delete[] foo.
其次,如果delete[]在循环之后执行,则只释放分配的最后一个内存,从而导致内存泄漏.
第三,你真的需要使用原始指针吗?你不能用eg std::vector而不是吗?
选项1:多次分配/解除分配=性能不佳
for(int i=1;i<10;i++)
{
foo = new int [i];
/*
...
*/
delete[] foo;
}
Run Code Online (Sandbox Code Playgroud)
选项2:多次分配/一次释放=内存泄漏
int *foo;
for(int i=1;i<10;i++)
{
foo = new int [i];
/*
...
*/
}
delete[] foo;
Run Code Online (Sandbox Code Playgroud)
选项3:如果需要动态内存,则一次分配/一次释放= OK
int *foo = new int [10];
for(int i=1;i<10;i++)
{
/*
...
*/
}
delete[] foo;
Run Code Online (Sandbox Code Playgroud)
选项4:避免动态分配/解除分配
for(int i=1;i<10;i++)
{
int foo[ i ];
/*
...
*/
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |