0

System::String^ ex;との違いは何System::String ex1;ですか? 「^」が付いているものはトップレベルを意味することがわかりました。しかし、それはどういう意味ですか?

4

2 に答える 2

2

System::String^は管理対象文字列オブジェクトへの参照でありSystem::String、スタック上に直接ある管理対象文字列オブジェクト、または別のクラスのインラインです。

で述べたように、C ++ / CLIでのカレット('^')はどういう意味ですか?、は追跡参照であり、アンマネージコードのポインターと^ほぼ同等です。あなたが持つことができるのと*同じようにunmanagedClass* foo1;unmanagedClass foo2;あなたは持つことができますSystem::String^ str1;System::String str2;

を使用せずに使用すると、 :を使用しない^アンマネージクラスと同じルールに従います。スコープを離れると自動的にクリーンアップされます(デストラクタはアンマネージド、disposeメソッドはマネージド)。*.->

管理対象オブジェクトを難しくせずに操作できるようにする1つの点^は、ほとんどの管理対象オブジェクトがコピーコンストラクターまたはequals演算子を定義していないことです。これらはどちらもC#でもVBでも使用されないため、通常は実装されていません。それらがないと、。なしで変数に新しい値を割り当てることは不可能である^ため、通常、単一のオブジェクトのみを作成することに制限されます。

于 2012-08-21T17:19:59.810 に答える
1

C++/CLI には「スタック セマンティクス」と呼ばれる機能があります。C++ で RAII パターンをエミュレートすることを意図しており、^ ハットなしで参照型のローカル変数を宣言すると、コンパイラはクラスのデストラクタへの呼び出しを自動的に発行します。

これは System::String クラスには適していません。デストラクタがありません。

また、有用なコンストラクターがないため、帽子なしで宣言しようとすると、ほとんどの場合、コンパイラ エラー メッセージが表示されます。帽子は必ず使う。

于 2012-08-21T17:38:59.083 に答える