在赋值运算符中返回引用

时间:2013-05-30 13:02:24

标签: c++ reference operator-overloading return-type

我试图了解此代码中引用返回的目的是什么?是因为返回引用比复制快得多还是还有其他更重要的东西?

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;
}

2 个答案:

答案 0 :(得分:0)

是的,这是为了避免不必要的副本。但是,在这个特定类的情况下,它需要正确性,因为没有适当的复制构造函数。此类的默认复制实例将导致多个实例共享相同的data成员,并可能导致多次删除。

答案 1 :(得分:0)

在C ++函数中,签名不依赖于返回类型,因此在重载时会忽略返回。

在C ++ 11之前,返回值而不是引用会导致复制开销。