我有以下代码可以正常工作,但我不确定是否需要删除returned_array
中的int main()
指针或是否自动删除它。我猜它不会自动删除,并假设我应该在delete returned_array;
完成后使用cout
。有什么建议吗?
#include <iostream>
double* pass_return_array(double passed[])
{
double* returned_array = new double[3];
for(int index = 0; index < 3; index++)
returned_array[index] = passed[index];
return returned_array;
}
int main()
{
double passed[3];
double* returned_array;
for(int index = 0; index < 3; index++)
passed[index] = index + 100;
returned_array = pass_return_array(passed);
for(int index = 0; index < 3; index++)
std::cout<<returned_array[index]<<std::endl;
return 0;
}
答案 0 :(得分:4)
你是对的:你在函数中创建了数组,你也负责它的释放。您应该在不再需要时立即致电delete[] returned_array;
。
注意,操作系统总是清除程序终止时分配的所有资源,因此不会有任何系统范围的内存泄漏。但是将解除分配留给操作系统是一种非常糟糕的做法,你应该总是释放你分配的所有资源(包括其他类型的东西 - 例如文件或画笔的句柄)。
考虑使用std::vector
或std::array
- 如果用作简单的局部变量,它们将处理它们分配的内存,您不必记住它。这就是C ++在工作中的强大功能:))
答案 1 :(得分:2)
最好清理您分配的所有资源,无论您是否认为它将自动完成。
资源跟踪资源本身的责任也是一种好习惯。这意味着,如果从函数返回一些动态分配的内存,您也“返回”它的责任。
这并不是说它必须在函数调用者中清理,因为这可能会破坏封装(如果动态分配,你甚至不一定知道)。但是,即使您将资源传递回创建它的代码/库,也会按照以下伪代码再次传递责任:
def makeSomething():
something = unknownMethodForCreatingSomething()
#makeSomething() has responsibility here but passes it off to caller
return something
def killSomething(something):
# Responsibility with killSomething() at this point
equallyUnknownMethodForDestroyingSomething(something)
def main():
xyzzy = makeSomething()
# main() has responsibility for xyzzy here but hands it off in next line
killSomething (xyzzy)