回答編集履歴

1

肝心な事を追記

2018/07/27 13:50

投稿

pepperleaf
pepperleaf

スコア6383

test CHANGED
@@ -23,3 +23,29 @@
23
23
 
24
24
 
25
25
  他の方と似たり寄ったりとなっていますが、どうでしょう。
26
+
27
+
28
+
29
+ --------------------
30
+
31
+ 参照は、アドレスでなく、ハンドル? だったか。 ラベルと言っても良いかも。
32
+
33
+
34
+
35
+ Main() で Hoge, Huga と名付けられているオブジェクトの実体を Obj1, Obj2 とします。
36
+
37
+ --> Main()では、 Obj1 は、Hoge, Obj2 は Huga の名前(ラベル)で呼ばれる。これは、 Cal()の引数として渡され、Cal()内では、 a, b と呼ばれる。 (a <-- Obj1, b <-- Obj2)
38
+
39
+ ここで、 a = b の処理は、 Obj2 に a と言う名前(ラベル)を付ける事に相当します。これは、 Cal()内での話で、Main()での Hoge, Huga にはなんの関係もありません。
40
+
41
+ これに対し、a.x = 10 は、aと言う名前(ラベル)を持つ Obj1 の中にある xを変更する処理となります。
42
+
43
+
44
+
45
+ なぜ、アドレスと言うのが間違いかと言うと、Obj1 と Obj2 を管理しているのは別(OS?) なので、
46
+
47
+ Obj1, Obj2 はその時々の都合でどこに置かれるか分からないから。例えるなら、最初、倉庫A にあったが、一杯になったので、倉庫Bに移される事があるから。で、Obj1 を参照するという事は、倉庫の管理人に対し、 Obj1 を要求する事になります。 (と、書いていたら、i-node と一緒? て気がしてきた)
48
+
49
+
50
+
51
+ 通常、気にする必要はありませんが、アンマネージドの C++ とI/Fする時に、問題となり、メモリをロック(勝手に倉庫を動かすな、と言う指定)しないと不正な結果となります。