私はちょうどこのコードに出くわしました、そして、いくつかのグーグル検索はこの神秘的な(私にとって)構文の説明を見つけません。
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
カレットは一体どういう意味ですか?(これも私にとっては新しいことであり、ここでgcnew
それについて尋ねました。)
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object
//.. here CLI managed
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue
一般に、句読点%
は to^
であり、句読点&
は to*
です。C++ では、単項&
演算子は C++/CLI では単項演算%
子です。
whileは を&ptr
生成しP*
、%mngd
at は生成しMO^
ます。
これは、管理対象オブジェクトと通常のC++ポインターへの参照であることを意味します。このような参照の背後にあるオブジェクトはランタイムによって管理され、メモリ内に再配置できます。また、自動的にガベージコレクションされます。
管理対象メモリを割り当てると、そのメモリはガベージコレクタによって移動できます。演算子は、ガベージコレクターがポイントするオブジェクトを移動した場合でも、正しい^
場所をポイントし続けるマネージメモリへのポインターです。
MSDNからは、caretは、作成されているタイプへのハンドルを取得していることを意味しているように見えます。
C ++ / CLIでは、マネージポインターを意味します。あなたはそれ(そして他のC ++ / CLI機能)についてもっと読むことができます:
これは、管理対象オブジェクトへの参照であることを意味します。