2009-07-14 8 views
5

どこかにあることを覚えていますが、 "^"演算子はManaged C++コードのポインタ演算子として使われています。したがって、 "^"は "*"演算子と等価でなければなりません??私は.NETを理解し始め、いくつかのサンプルプログラムをコード化する際String^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 

を私はトラブルにこれを理解することが生じています。

答えて

8

String^は、管理されたヒープへのポインタであり、別名ハンドルです。ポインタとハンドルは入れ替えできません。

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

username = "XYZ"は単なるコンパイラの砂糖です。あなたは^は、あなたがそう遠くない真実からなりshared_ptrに似ていることを考えるとそれは

username = gcnew String(L"XYZ"); 
3

これは、ガベージコレクション文字列の参照であり、ポインタではありません。

何も参照していないときは自動的に割り当てられ、割り当てが解除されます。

2

に相当します。