0

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

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

2 回答 2

0

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

于 2013-05-30T13:06:30.143 回答
0

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

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

于 2013-05-30T13:06:39.977 回答