C ++ new&删除和功能

时间:2010-06-03 12:36:05

标签: c++ new-operator delete-operator

这对我来说有点不清楚......所以,如果我有一个功能:

char *test(int ran){
    char *ret = new char[ran];
    // process...
    return ret;
}

然后多次调用它:

for(int i = 0; i < 100000000; i++){
   char *str = test(rand()%10000000+10000000);
   // process...

   // delete[] str; // do i have to delete it here?
}

所以问题是,我是否必须为每个delete[]电话使用new[]

3 个答案:

答案 0 :(得分:5)

是的,否则你会有内存泄漏。

尽管如此,分配一个功能并在另一个功能中免费并不是最好的主意。为什么不在for循环中分配并将指针传递给test - 这会使newdelete保持在代码中。

答案 1 :(得分:5)

你没有拥有。但是如果你不删除你用'new'保留的内存,你最终会开始耗尽内存(内存泄漏)。

答案 2 :(得分:3)

已经给出了答案,但是当你将问题标记为C ++而不是C时,这就是你可能想用C ++做的事情(当然,可能还有其他原因没有,但是很少几率)。

vector<char> (int ran){
    vector<char> ret(char);
    // process...
    return ret;
}

并称之为:

for(int i = 0; i < 100000000; i++){
   vector<char> str = test(rand()%10000000+10000000);
   // process...
}

没有新的,因此没有删除因此没有内存泄漏。

实际上,你也可能想使用std :: string而不是char *(我使用vector来给出更一般的例子)。

不要担心要复制的数据。编译器将优化它。 编辑:好吧,它可能不会优化它:)但它有很大机会。只要没有性能问题,请选择最简单的版本。