对 c++ 函数内 new 的变量,在函数外怎么 delete 的疑问?

2016-05-24 11:33:14 +08:00
 ren2881971

大致意思就是 我在函数内 new 创建了对象,那么在函数外又重新指向了对象,那么怎么 delete 呢?

/****************************
c++ Primer plus 7.13  练习
 编写一个程序,要求用户输入最多 10 个高尔夫成绩,并将其存储在一个数组中。程序允许用户提早结束输入,并在 
一行上显示所有成绩,然后报告平均成绩。请使用 3 个数组处理函数来分别进行输入、显示和计算平均成绩。请使用 3 个数组 
处理函数来分别 
******************************/

#include <iostream>
using namespace std;
double *inputValue(int *n);
void showValue(double arr [],int n);
double avgValue(double arr [],int n);
const int SIZE = 10;
int main(){
	int n = 0;
	double *array = inputValue(&n);// 这里算是将 inputValue 函数中 new 的 double *arr 对象重新指向 array 么?
	showValue(array,n);
	double temp = avgValue(array,n);
	cout << "\navg value : "<<temp<<endl;
	delete [] array;//这里将 array delete 掉。那么 inputValue 中 new 的 arr 怎么办? 也能被 delete 掉么?
	return 0;
}

double * inputValue(int *n)
{
	double * arr = new  double[SIZE];
	for(int i = 0;i<SIZE;i++)
	{
		cin >> arr[i];
		(*n)++;
	}
	
	return arr;
}

void showValue(double arr [] ,int n )
{
	for(int i = 0;i<n;i++)
	{
		cout << arr[i] <<" ";
	}
	cout << "\n";
}

double avgValue(double arr [],int n)
{
	double total = 0.0;
	for(int i = 0 ;i<n;i++)
	{
		total += arr[i];
	}
	return (total/n);
}







2428 次点击
所在节点    问与答
2 条回复
sec
2016-05-24 21:06:30 +08:00
使用 new 分配的动态数组在内存中是一片区域,而*arr 是一个指针,指向这片区域开头的部分, inputValue()在最后将这个指针作为返回值传递给主函数中的*array ,这两个指针指向的是同一片区域,在主函数中调用 delete[] 就能删除 inputValue()中分配出来的空间。
ren2881971
2016-05-24 21:28:31 +08:00
@sec 太感谢了!

“ inputValue()在最后将这个指针作为返回值传递给主函数中的*array ,这两个指针指向的是同一片区域”
这句话对我帮助很大!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/280860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX