質問
このコードを偶然見つけたので、著者にその意味を尋ねることができません。
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つ以上の到達不能オブジェクトが相互に参照している場合でも、メモリリークが発生します。自動参照カウントはパフォーマンス上は無料ではないため、賢明に使用してください。
所属していません StackOverflow