为什么在这种情况下必须取消引用“ this”? (赋值运算符)

时间:2019-07-26 11:57:59

标签: c++ class operator-overloading this assignment-operator

这是一个示例(从Bjarne Stroustrup的“ C ++之旅(第二版)中摘录)”中的一个用户定义的矢量类的副本分配:

Vector& Vector::operator=(const Vector& a) // copy assignment
{
    double* p = new double[a.sz];
    for (int i=0; i!=a.sz; ++i)
        p[i] = a.elem[i];
    delete[] elem; // delete old elements
    elem = p; // here elem is the vector's data holding member array
    sz = a.sz;
    return *this;
}

'This'是一个指针,因此取消引用它实际上应该为我们提供它所指向的当前对象。在期望引用该对象的情况下,该对象如何作为返回值被接受?

3 个答案:

答案 0 :(得分:3)

this是指向所分配对象的指针。该函数返回对该对象的引用。因此,您需要取消引用指针以获取对象的左值。

答案 1 :(得分:3)

  

“这”是一个指针,因此取消引用它实际上应该为我们提供它指向的当前对象。

是的

  

在期望引用该对象的情况下,该对象如何作为返回值被接受?

与其他任何引用一样。

int x = 3;
int& ref = x;  // just fine
  

为什么在这种情况下需要取消引用“ this”? (赋值运算符)

需要取消引用指针以获取pointee的需要,与返回引用类型的函数几乎没有关系,只是说如果没有取消引用该指针,则说明d必须返回指针,因此返回类型必须为Vector*

答案 2 :(得分:2)

this是指针类型。您的函数返回对Vector的引用。要将指针转换为左值,需要取消引用。