返回引用的问题!!!
#include <iostream>
using namespace std;
class base
{
public:
int a;
base(){cout < < "base constrctor!! " < <endl;};
base(const base& bs)
{
cout < < "copy constrctor!! " < <endl;
};
~base(){cout < < "destrctor!! " < <endl;};
base& operator=(base& bs){cout < < "====!! " < <endl;return bs;};
};
base func(base bs)
{
return bs;
};
int main(int argc, char* argv[])
{
base bs1;
base& bs2=func(bs1);//这句如果改成base bs2=func(bs1);
system( "pause ");
return 0;
}
如果base& bs2=func(bs1);改为base bs2=func(bs1),好像没有什么影响。
有个疑问:明明要求返回一个引用,为什么base bs2=func(bs1)没有问题呢??
base& bs2=func(bs1);到底有没有建立一个bs2的新对象??还是bs2紧紧是返回值的引用。
[解决办法]
谢谢楼上的,但是还是有割疑问, 为什么返回的是引用, 而又可以赋值给一个对象呢, 觉得返回引用就应该将其赋值给引用才对呀,base bs2=func(bs1);怎么能成立呢 ???
你要明白为什么要返回引用,它的目的是实现链式操作(比如 a=b=c=d)
如果不返回引用的时候,它就会产生幽灵内存(存储空间被析构掉了)
引用的返回值是对于赋值的对象是没有特殊要求的(不过得类型匹配)