2

私は次のコードを持っています:-

#include <iostream>
using namespace std;

class A { 
    int *val;
public:
    A() { val = new int; *val = 0; }
    int get() { return ++(*val); } 
};

int main() {
    A a,b = a;

    A c,d = c;

    cout << a.get() << b.get() ;
    cout << endl ; 

    cout << c.get() << endl ;//
    cout << d.get() << endl;
    return 0;
}

出力は次のように生成されます:-

21
1
2

c.get と d.get の場合の動作は理解しやすいものです。c と d は同じポインター val を共有し、a と b は同じポインター val を共有します。

したがって、c.get() は 1 を返し、d.get() は 2 を返す必要があります。しかし、a.get() と b.get() で同様の動作を期待していました。(cout をちゃんと理解していないのかもしれません)

a.get() が 2 を生成する方法を理解できません。

なぜ私がそのような出力を得ているのか説明できますか?私によると、出力は次のようになっているはずです:-

12
1
2
4

1 に答える 1