Да, в коде, который вы написали, вызов delete[]
необходим после каждого вызова return_array()
, поскольку он выделяет новую память в куче, которая не восстанавливается автоматически. В отличие от Java и других языков более высокого уровня, C ++ не имеет сборщика мусора. Невозможность вызвать delete[]
приведет к утечкам памяти и постоянно увеличивающемуся размеру кучи.
Как указано @Ron в комментариях, жизнеспособной альтернативой является использование std::vector<int>
(если массив никогда не нужно будет увеличивать, см. Также std::array
). Хотя вектор внутренне будет использовать выделение кучи, он также автоматически управляет ими, так что когда они выходят из области видимости, их память автоматически восстанавливается.
#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
}