我试图了解在此代码中返回引用的目的是什么?仅仅是因为返回引用比复制要快得多,还是有其他更重要的东西?参考返回赋值运算符
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;
}
感谢您的relpy,但我Coult了解您的答案的一部分。“默认复制此类的实例将导致多个实例共享相同的数据成员,并且可能会导致多次删除。我的意思是如果我不能写&那里,当我删除c对象中的部分数据时,它也通过b和一个对象删除? –
如果你用一个指向已分配内存的成员编写一个类,则必须小心指针永远不会泄漏或被双重删除。通常这意味着您需要定义析构函数和复制构造函数以及operator =()。如果你没有定义一个拷贝构造函数(你不这样做,那是一个赋值函数),那么你会得到一个默认拷贝构造函数,它可以逐位拷贝对象;那么你会有两个对象都指向相同的'数据'数组,最终会导致双重删除(或者泄漏,如果没有删除数组)。 –
抱歉错误的解释假设有析构函数和复制构造函数,我没有写他们,因为我只是想知道我的代码的这部分,但你说得对,我应该解释这一点。 –