V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ren2881971
V2EX  ›  问与答

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

  •  
  •   ren2881971 · 2016-05-24 11:33:14 +08:00 · 2450 次点击
    这是一个创建于 3139 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大致意思就是 我在函数内 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);
    }
    
    
    
    
    
    
    
    
    sec
        1
    sec  
       2016-05-24 21:06:30 +08:00
    使用 new 分配的动态数组在内存中是一片区域,而*arr 是一个指针,指向这片区域开头的部分, inputValue()在最后将这个指针作为返回值传递给主函数中的*array ,这两个指针指向的是同一片区域,在主函数中调用 delete[] 就能删除 inputValue()中分配出来的空间。
    ren2881971
        2
    ren2881971  
    OP
       2016-05-24 21:28:31 +08:00
    @sec 太感谢了!

    “ inputValue()在最后将这个指针作为返回值传递给主函数中的*array ,这两个指针指向的是同一片区域”
    这句话对我帮助很大!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:27 · PVG 20:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.