写点什么

关于 C++ 中“不能返回对象引用”的思考

发布于: 2021 年 08 月 26 日
关于C++中“不能返回对象引用”的思考

C++的使用者或多或少都听说过这样一句话:函数返回值不能返回对象的引用。

这句话当然是错误的,如果函数返回值真的不能返回对象引用,那编译器直接把这种情况判定为编译错误就可以了。

那这句话究竟是哪里说错了?

我们可以先看看一下代码:

A& func(){

    A a;

    return a;

}

对象 a 是在函数栈上分配,当 func 函数调用完毕后,对象 a 就会被回收,此时如果把对象 a 的引用当作返回值,那将访问到被回收的内存而导致程序异常出错。

但是看看下面的代码:

A& A::operator=(A& a_){

    this = &a_;

    return *this;

}

上面的代码其实是合法的,因为*this 不是临时对象,即使离开了 operator=函数体,this 也不会被销毁。因此这种用法是被允许的。

因此,正确的说法应该是:函数返回值不能返回临时对象的引用,但是可以返回非临时对象的引用。

发布于: 2021 年 08 月 26 日阅读数: 6
用户头像

还未添加个人签名 2018.03.11 加入

还未添加个人简介

评论

发布
暂无评论
关于C++中“不能返回对象引用”的思考