C++函数,返回引用

C++语言 码拜 7年前 (2017-05-07) 2348次浏览
原文:
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这个指针有用吗?
解决方案

10

下面这样写,一般会有问题,原因是ft是局部变量,这个内存是在函数结束后会被释放的。指针是不是局部变量是没关系的,关键是指针指向的对象是不是局部变量,这才是根本。
但是局部变量不能保证在函数结束之后,就会立马释放,所以有时候能取出正确的值。

const free_throw & clone()
{
          free_throws  ft;
          free_throws * pt;
          //注意这里的写法,你直接对指针解引用,并且赋值是很有问题的。
          pt = &ft;
          return *pt;
}

你的ft是外部传进来的,生命周期比函数长,所以没有什么影响。
但是 *pt = ft的写法是有问题,只会这么写 pt=&ft。pt在没有赋值的时候,指向的内存不定,但是对他做解引用操作,操作是未定义的。

20

函数结束后,只是指针自由的内存被销毁了,并没有释放指针指向的对象
其次,你这个函数相当于 return ft;   也就是说,返回的就是传入的参数的引用,应该直接写成: return ft
你这样的写法是错的,原因是你函数中的指针并没有分配空间,就直接去解引了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++函数,返回引用
喜欢 (0)
[1034331897@qq.com]
分享 (0)