C++函数,返回引用

搓衣板11 2017-03-28 02:32:40
原文:
const free_throw & clone(free_throws & ft)
{
free_throws * pt;
*pt = ft;
return *pt;
}
第一条语句创建一个无名的free_throws结构,并让指针pt指向该结构,因此*pt就是该结构,上述代码似乎会返回该结构,但函数声明表明,该函数实际上将返回这个结构的引用。这样,便可以这样使用该函数:
free_throws & jolly =clone(three) 这使得jolly成为新结构的引用。

我的问题:
这个指针是在这个函数里面声明的,那每次执行这个函数之后 ,都会释放这个内存空间,那个return这个指针有用吗????
...全文
183 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-03-29
  • 打赏
  • 举报
回复
函数结束后,只是指针自由的内存被销毁了,并没有释放指针指向的对象

其次,你这个函数相当于 return ft; 也就是说,返回的就是传入的参数的引用,应该直接写成: return ft

你这样的写法是错的,因为你函数中的指针并没有分配空间,就直接去解引了
欧阳春晖 2017-03-29
  • 打赏
  • 举报
回复
楼主,你这样会引起访问违规的 野指针是不允许访问的。。。
linux_hsylar 2017-03-28
  • 打赏
  • 举报
回复
这段代码在VS2013下直接中断,中断在函数内部,未初始化的指针直接被对象赋值,直接挂掉。
lilillos 2017-03-28
  • 打赏
  • 举报
回复
下面这样写,一般会有问题,因为ft是局部变量,这个内存是在函数结束后会被释放的。指针是不是局部变量是没关系的,关键是指针指向的对象是不是局部变量,这才是根本。 但是局部变量不能保证在函数结束之后,就会立马释放,所以有时候能取出正确的值。

const free_throw & clone()
{
          free_throws  ft;
          free_throws * pt;
          //注意这里的写法,你直接对指针解引用,并且赋值是很有问题的。
          pt = &ft;
          return *pt;
}
你的ft是外部传进来的,生命周期比函数长,所以没有什么影响。 但是 *pt = ft的写法是有问题,只会这么写 pt=&ft。pt在没有赋值的时候,指向的内存不定,但是对他做解引用操作,操作是未定义的。
真相重于对错 2017-03-28
  • 打赏
  • 举报
回复
return的是传进来的地址。

64,682

社区成员

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

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