gpt4 book ai didi

c++ - 超出范围会自动删除动态数组内存分配吗?

转载 作者:行者123 更新时间:2023-11-27 22:33:19 25 4
gpt4 key购买 nike

#include<iostream>

using namespace std;

int main()
{
int *numbers, sum = 0, input, size = 0;
const int CHUNK = 3;
int capacity = CHUNK;

numbers = new int[capacity];

cout << "Enter the number(negative number to end): ";
cin >> input;

while(input >= 0)
{
if(size >= capacity)
{
capacity += CHUNK;
int *temp = new int[capacity];
for(int i = 0; i < size; i++)
{
temp[i] = numbers[i];
}
delete [] numbers;
numbers = temp;

cout << "Expanding by " << CHUNK << endl;

}
numbers[size] = input;
size++;
cin >> input;
}

cout << "\nYou entered: ";
for(int i = 0; i < size; i++)
{
cout << numbers[i] << " ";
}
delete [] numbers;

return 0;
}

考虑上面的代码,它是可调整大小数组的示例。它不断从用户那里获取输入并不断以 3 为增量相应地扩展数组。

在“if”语句中,我正在为数组“temp”动态分配内存

int *temp = new int[capacity];

我知道必须有一个delete for temp 才能释放内存。但是,我只是想不出在哪里写它,因为如果我确实在 if 语句的范围内写它,那么它最终会打印出一堆奇怪的数字。但是,没有它也能正常工作。或者当动态数组超出范围时内存会自动释放吗?

最佳答案

您不需要删除 temp,因为您正在将它分配给 numbers,后者稍后会被删除。

管理指针的一种更简单、更安全的方法是使用 std::unique_ptrstd::shared_ptr,它们会在变量超出范围时自动释放内存。

关于c++ - 超出范围会自动删除动态数组内存分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245877/

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