最大的区别在于,返回对象的话会在内存中根据返回的类型开辟一块区域,用返回的值对该内存进行初始化,如果是返回的对象,利用拷贝构造来初始化这个区域,但是这块区域并没有名字,就是说之后用户没办法访问到这个区域,也成为无名变量,它只能在接下来的代码中进行一次性的用途,要不作为参数传递,或者将值打印,再之后就会直接销毁,或者调用析构函数。
而返回引用的话,引用的本质是对裸露的地址的二次包装,它实际返回的还是一个变量或对象的地址,因此如果返回引用不可以返回局部变量的,因为函数在返回之后,该变量就销毁。
以下代码是对运算符*进行重载,返回引用和返回对象有不同的结果。#include<iostream>
using namespace std;
class A
{
public:
A() { cout << "A::A()" << endl;}//A构造函数
A(A& another){cout << "A(A& another)" << endl;}
~A(){ cout << "~A::A()" << endl;}//A析构函数
void func(){ cout << "class A::void func()" << endl;}
};
class B
{
public:
B(A* p) :_p(p){cout &l