gpt4 book ai didi

c++ - 从函数返回数组时是否需要删除

转载 作者:行者123 更新时间:2023-12-03 13:32:02 26 4
gpt4 key购买 nike

在函数内部的堆上创建数组时,是否需要在主函数中删除数组?考虑一下,这个程序:

#include "stdafx.h"
#include <iostream>

using namespace std;

int * return_array() {
int* my_array = new int[10];
my_array[0] = 10;
return my_array;
}

int main()
{
int * returned_array = return_array();
cout << returned_array[0];
delete[] returned_array;
return 0;
}

这一行:int* my_array = new int[10]; 是否需要在主程序中删除?我发现每次都这样做很难保持和正确。

最佳答案

是的,在您编写的代码中,调用了 delete[]每次调用 return_array() 后都是必需的因为它在堆上分配新内存,不会自动回收。与 Java 和其他高级语言不同,C++ 没有垃圾收集器。未能调用delete[]将导致内存泄漏和不断增长的堆大小。

正如@Ron 在评论中指出的那样,一个可行的替代方法是使用 std::vector<int> (如果数组永远不需要增长,那么另见 std::array )。虽然 vector 将在内部使用堆分配,但它也会自动为您管理它们,以便在它们超出范围时自动回收它们的内存。

#include <vector>

std::vector<int> return_vector() {
std::vector<int> my_vector(10);
my_array[0] = 10;
return my_array;
}

int main()
{
std::vector<int> returned_vector = return_vector();
std::cout << returned_vector[0];
return 0; // vector internal memory is reclaimed
}

关于c++ - 从函数返回数组时是否需要删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51118084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com