私は次のコードを持っています:-
#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