| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 492 人关注过本帖
标题:有句话不懂,有谁能解释一下
只看楼主 加入收藏
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
 问题点数:0 回复次数:4 
有句话不懂,有谁能解释一下

不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。

这句话不是太懂,有谁能解释一下?最好能写个小程序测试一下.

搜索更多相关主题的帖子: 解释 
2006-10-13 11:08
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 
#include <iostream>
using namespace std;
float * & Back()
{
float * fp = new float(5.3f);
return fp;
}
int main()
{
float * fp1 = Back();//这里赋予一个实际的变量fp1,后我们就可以用fp1来释放这个申请的空间.如果你只是单纯的调用Back()的话,就没办法释放了.
cout<<*fp1<<endl;
delete fp1;
system("pause");
return 0;
}
//这个程序用某些编译器不能看到正确的结果如VC6,在DEV中能看到结果
但是不管用哪个编译器都会告诉你:不能返回一个局部变量的引用

2006-10-13 18:26
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 
以下是引用wangxiang在2006-10-13 18:26:49的发言:
#include <iostream>
using namespace std;
float * & Back()
{
float * fp = new float(5.3f);
return fp; //这个函数是错的吧,fp是局部变量,不能返回引用的.
}
int main()
{
float * fp1 = Back();//这里赋予一个实际的变量fp1,后我们就可以用fp1来释放这个申请的空间.如果你只是单纯的调用Back()的话,就没办法释放了.
cout<<*fp1<<endl;
delete fp1;
system("pause");
return 0;
}
//这个程序用某些编译器不能看到正确的结果如VC6,在DEV中能看到结果
但是不管用哪个编译器都会告诉你:不能返回一个局部变量的引用



#include <iostream>
using namespace std;
float & Back()
{
float * fp = new float(5.3f);
return *fp;
}
int main()
{
float & fp1 = Back();//这里赋予一个实际的变量fp1,后我们就可以用fp1来释放这个申请的空间.如果你只是单纯的调用Back()的话,就没办法释放了.
cout<<fp1<<endl;
delete &fp1;
system("pause");
return 0;
}


2006-10-13 21:10
wangxiang
Rank: 2
等 级:新手上路
威 望:5
帖 子:376
专家分:0
注 册:2006-3-28
收藏
得分:0 

呵呵,我知道
你好象没看到我最后说的"但是不管用哪个编译器都会告诉你:不能返回一个局部变量的引用"
我那么写只是为了能更好的理解,


2006-10-13 21:48
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

哦,懂了,谢谢.


2006-10-13 22:01
快速回复:有句话不懂,有谁能解释一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031905 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved