C++新和删除和功能
这是一个有点不清楚,我...所以,如果我有一个函数:C++新和删除和功能
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[]
吗?
你不要有到。但是如果你不删除你用'new'保留的内存,你最终会开始耗尽内存(内存泄漏)。
啊,是的,这是有道理的,因为我的程序似乎每次都使用越来越多的内存:D – Newbie 2010-06-03 12:44:40
已经给出了答案,但是当您将问题标记为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来给出一个更一般的例子)。
不要担心将被复制的数据。编译器会优化它。 编辑:好吧,它可能不会优化它:)但是它有很大的机会。只要没有性能问题,请选择最简单的版本。
“编译器会优化它。” zildjohn01 2010-06-03 12:55:48
好吧,这并不比说“它会复制矢量并导致性能损失”更困难。但我仍然编辑它:) – 2010-06-03 12:59:28
这似乎是一个常见的C++问题。一般来说,如果您使用的是同一个类,则需要调用'new'和'delete'。否则我很想看看人们说什么。 – 2010-06-03 12:38:50