5

マネージ C++ コードで "^" 演算子がポインター演算子として使用されているのをどこかで見たのを覚えています。したがって、「^」は「*」演算子と同等である必要がありますよね??

私の理解が正しいと仮定すると、.Net を理解し始め、いくつかのサンプル プログラムをコーディングしたときに、次のようなコードに出くわしました。

String ^username; //my understanding is you are creating a pointer to string obj
.
.         // there is no malloc or new that allocates memory to username pointer
.
username = "XYZ"; // shouldn't you be doing a malloc first??? isn't it null pointer

私はこれを理解するのに苦労しています。

4

3 に答える 3

8

String^マネージ ヒープへのポインター、別名handleです。ポインターとハンドルは交換できません。

呼び出すnewと、アンマネージド ヒープにオブジェクトが割り当てられ、ポインターが返されます。一方、呼び出すgcnewとマネージド ヒープにオブジェクトが割り当てられ、ハンドルが返されます。

この行username = "XYZ"は単なるコンパイラ シュガーです。と同等です

username = gcnew String(L"XYZ");
于 2009-07-14T20:58:34.610 に答える
3

これは、ガベージ コレクションされた文字列へのポインタではなく参照です。

何も参照されなくなると、自動的に割り当ておよび割り当て解除されます。

于 2009-07-14T20:57:27.093 に答える
2

^それがあなたに似ていると考えるならshared_ptr、真実からそう遠くないでしょう.

于 2009-07-14T21:04:34.473 に答える