Home > database >  How do i use hidden *this pointer? [closed]
How do i use hidden *this pointer? [closed]

Time:10-04

I have this code:

class Something
{
private:
    int m_value = 0;
public:
    Something add(int value)
    {
        m_value  = value;
        return *this;
    }
    int getValue()
    {
        return m_value;
    }

};

int main()
{
    Something a;
    Something b = a.add(5).add(5);
    cout << a.getValue() << endl;
    cout << b.getValue() << endl;
}
output:
5
10

I tried to make method add() to return *this and execute after that like (*this).add(5), but this doesn't work. However, b is good (how?). I expected a to be 10 also as b.

So, where did I miss the usage of hidden pointer? What should i do to use a.add(5).add(5) as it supposed to have the m_value of a to be 10?

CodePudding user response:

add() is returning *this by value, so it is returning a copy of *this, so the chained add() is modifying the copy, not the original.

add() needs to return *this by reference instead:

Something& add(int value)
{
    m_value  = value;
    return *this;
}

UPDATE: a initially has m_value set to 0, then a.add(5) sets a.m_value to 5 and then returns a copy of a. Then <copy>.add(5) sets <copy>.m_value to 10 and returns another copy, which is then assigned to b. That is why you see a is 5 but b is 10.

  • Related