238

私はちょうどこのコードに出くわしました、そして、いくつかのグーグル検索はこの神秘的な(私にとって)構文の説明を見つけません。

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

カレットは一体どういう意味ですか?(これも私にとっては新しいことであり、ここでgcnewそれについて尋ねました。)

4

8 に答える 8

191

これはC++/ CLIであり、caretは*(ポインター)のマネージド同等物であり、C ++ / CLIの用語では「参照型」の「ハンドル」と呼ばれます(アンマネージポインターを使用できるため)。

(より良い用語を指摘してくれたAardvarkに感謝します。)

于 2008-10-14T19:20:11.183 に答える
94
// 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*%mngdat は生成しMO^ます。

于 2013-01-17T11:45:00.060 に答える
21

これは、管理対象オブジェクトと通常のC++ポインターへの参照であることを意味します。このような参照の背後にあるオブジェクトはランタイムによって管理され、メモリ内に再配置できます。また、自動的にガベージコレクションされます。

于 2008-10-14T19:21:58.060 に答える
20

管理対象メモリを割り当てると、そのメモリはガベージコレクタによって移動できます。演算子は、ガベージコレクターがポイントするオブジェクトを移動した場合でも、正しい^場所をポイントし続けるマネージメモリへのポインターです。

于 2008-10-14T19:23:38.087 に答える
5

MSDNからは、caretは、作成されているタイプへのハンドルを取得していることを意味しているように見えます。

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

于 2008-10-14T19:23:26.340 に答える
4

C ++ / CLIでは、マネージポインターを意味します。あなたはそれ(そして他のC ++ / CLI機能)についてもっと読むことができます:

http://en.wikipedia.org/wiki/C%2B%2B/CLI

于 2008-10-14T19:23:05.530 に答える
2

これは、管理対象オブジェクトへの参照であることを意味します。

于 2008-10-14T19:20:09.950 に答える