我试图了解此代码中引用返回的目的是什么?是因为返回引用比复制快得多还是还有其他更重要的东西?
class Container
{
public:
int Elems;
int * data;
Container(int n):Elems(n){data=new int[Elems];}
Container operator= (const Container &rhs);
};
Container & Container:: operator= (const Container & rhs)
{// I deleted the & and I can still compiled and make such things (a=b=c)
if(this!=&rhs)
{
if(data!=NULL)
{
delete [] data;
}
Elems=rhs.Elems;
data=new int[Elems];
for(int i=0;i<Elems;i++)
data[i]=rhs.data[i];
}
return *this;
}
答案 0 :(得分:0)
是的,这是为了避免不必要的副本。但是,在这个特定类的情况下,它需要正确性,因为没有适当的复制构造函数。此类的默认复制实例将导致多个实例共享相同的data
成员,并可能导致多次删除。
答案 1 :(得分:0)
在C ++函数中,签名不依赖于返回类型,因此在重载时会忽略返回。
在C ++ 11之前,返回值而不是引用会导致复制开销。