質問

このコードを偶然見つけたので、著者にその意味を尋ねることができません。

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

gcnew とは何ですか。単に new の代わりにそれを使用することの重要性は何ですか? (キャレットにも困惑しています。こちら。)

役に立ちましたか?

解決

gcnew は.NET参照オブジェクト用です。 gcnewで作成されたオブジェクトは自動的にガベージコレクションされます。 CLR型でgcnewを使用することが重要です

他のヒント

gcnew は、 new 演算子と同様の演算子ですが、作成したものを削除する必要はありません。それは g アーベジ c に修正されました。 .cマネージ型の作成にはgcnewを使用し、アンマネージ型の作成にはnewを使用します。

キャレット '^'は、型を宣言するときにC / C ++の '*'に単純に作用します。

// pointer to new std::string object -> memory is not garbage-collected
std::string* strPtr = new std::string;

// pointer to System::String object -> memory is garbage-collected
System::String^ manStr = gcnew System::String;

管理対象オブジェクトをC / C ++のポインタのように「nullptr」と比較できるものとして管理対象オブジェクトを記述する場合、「ポインタ」という用語を使用します。 C / C ++の参照は、既存のオブジェクトのアドレスであるため、「nullptr」と比較できません。

管理対象オブジェクトは自動参照カウントを使用します。つまり、参照カウントがゼロの場合、それらは自動的に破棄されますが、2つ以上の到達不能オブジェクトが相互に参照している場合でも、メモリリークが発生します。自動参照カウントはパフォーマンス上は無料ではないため、賢明に使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top