トラッキング参照

C++の参照のCLR版がトラッキング参照です。その名前のとおり参照先を追跡できる参照です。マネージヒープ上にあるインスタンスはGCによって移動するので、それを追跡できるという意味でトラッキングという名前になっていると思われます。

ハンドルは、C++のポインタと同じように=で値を代入できます。

C^ a = gcnew C;
C^ b = a;
C^ c;
c = b;

ハンドルa,b,cは同じインスタンスを参照します。

トラッキング参照はC++の参照のように、初期化時のみ値を設定できます。

ハンドルは「何も参照してない状態」として、nullptrを代入できますが、トラッキング参照はC++の参照ように、そのような概念はありません。

トラッキング参照は%を使って宣言します。

C^ a = gcnew C;
C% t = *a;
C% u;  // エラー 初期化が必要
C^% v = a;   
C^ b = gcnew C;
t = *b; // エラー 再設定不可