关于函数返回引用的问题

tufei8438 2008-08-03 11:44:53
下面的代码:
#include <string>

string& test()
{
string* ret_str = new string;

ret_str = "test string";
return *ret_str;
}

这段代码没有什么意义,我想问的是,如果我返回引用
在其他代码中调用这个函数
string& str=test();

那么在test()函数中给ret_str分配的内存怎样释放?
可以用delete &str;吗?
...全文
127 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
foliage_ 2008-08-03
  • 打赏
  • 举报
回复
代码不能通过编译


首先:ret_str = "test string"; 就是错的 (ret_str是个string指针)
如果改成
string& test()
{
string* ret_str = new string;

*ret_str = "test string";
return *ret_str;
}

也是不能通过编译的 (*ret_str)不是一个合法的引用
Row_Li 2008-08-03
  • 打赏
  • 举报
回复
使用string,感觉不需要使用string指针吧
同时,使用string也不需要new,直接string str就OK了,不需要管理string的内存释放问题
IanFang 2008-08-03
  • 打赏
  • 举报
回复
可以。

ret_str = "test string";
这是干什么啊?看看类型符合么?
OpenHero 2008-08-03
  • 打赏
  • 举报
回复
只是要记住,自己哪里需要释放,不然就有内存泄漏了
OpenHero 2008-08-03
  • 打赏
  • 举报
回复
可以
jay的Fans 2008-08-03
  • 打赏
  • 举报
回复
应该坚持认为谁分配谁释放
而且一定不要返回局部对象的引用,指针
K行天下 2008-08-03
  • 打赏
  • 举报
回复
ret_str = "test string";
这句不正确,
你要实现可以这样:

#include <string>
#include <iostream>
using namespace std;
string* test()
{
string* ret_str = new string("test string");
return ret_str;
}

int main()
{
string* s = test();
cout<<*s<<endl;
delete s;
}


arong1234 2008-08-03
  • 打赏
  • 举报
回复
我说的正确是指下面代码的语法应该是正确的。楼主自己的当然是错误的

string& test()
{
string* ret_str = new string;

*ret_str = "test string";
return *ret_str;
}
arong1234 2008-08-03
  • 打赏
  • 举报
回复
感觉代码返回*ret_str应该是合法引用,不知道为什么你的编译器会报错

但是我不建议对普通函数返回引用,因为在内存释放上确实有一堆问题。理论上,delete &myref是个好办法,但是你函数的用户必须非常了解你函数的实现才能这么用,但是“了解实现”是所有软件都应该避免的事情。

一般情况下,返回引用我只在类成员函数中用,因为类自己知道怎么释放内存,也没有前面的了解实现的问题
xk82180316 2008-08-03
  • 打赏
  • 举报
回复
应该坚持认为谁分配谁释放

要不然就分配全局变量
可以这个函数申请 哪个函数释放
www.iptry.cn

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧