Managed C++ のオブジェクトへのハンドルの違いは何ですか?
そのような:
System::String^ str = gcnew System::String();
そして通常の C++ ポインタ?
また、それらは C# の参照とどのように関連していますか?
Managed C++ のオブジェクトへのハンドルの違いは何ですか?
そのような:
System::String^ str = gcnew System::String();
そして通常の C++ ポインタ?
また、それらは C# の参照とどのように関連していますか?
(古い) Managed C++ について話しているのではなく、C++/CLI について話しているのではないでしょうか?
C# では、コードは次のようになります。
System.String str=new System.String();
C++/CLI では、オブジェクトへのハンドルは C# の参照とまったく同じです。参照カウント、ガベージ コレクターなどがあります。
一方、通常の C++ ポインターは (ほとんどの場合) アンマネージ オブジェクトへのポインターです。(もちろん) C# で (安全でないコードで) ポインターを使用できるように、マネージ オブジェクトへの C++ ポインターを使用できます。C# のポインターの詳細な説明については、こちらを参照してください。C++/CLI のポインターの詳細については、こちらを参照してください。これらのポインターは、ガベージ コレクターによって処理されません。