Apa arti tanda sisipan ('^') dalam C ++ / CLI?


212

Saya baru saja menemukan kode ini dan beberapa pencarian Google tidak menemukan penjelasan tentang sintaksis misterius ini (bagi saya).

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Apa sih yang dimaksud dengan tanda sisipan? (Ini gcnewjuga baru bagi saya, dan saya bertanya tentang itu di sini .)


6
Omong-omong, itu diucapkan "topi" .
kmote

Jawaban:


176

Ini adalah C ++ / CLI dan tanda sisipan adalah ekuivalen dikelola dari * (pointer) yang dalam terminologi C ++ / CLI disebut 'pegangan' ke 'tipe referensi' (karena Anda masih dapat memiliki pointer yang tidak dikelola).

(Terima kasih kepada Aardvark karena menunjukkan terminologi yang lebih baik.)


5
Apakah sintaks (saya kira "referensi tidak terkelola") "&" masih ada di C ++ / CLI?
Owen

C ++ / CLI adalah perpanjangan dari C ++ reguler, jadi ya - itu hanya untuk referensi yang tidak dikelola
1800 INFORMASI

77
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object

//.. here CLI managed 
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue

Secara umum, punctuator %adalah ^sebagai punctuator &adalah *. Dalam C ++ &operator unary dalam C ++ / CLI %operator unary .

Saat &ptrmenghasilkan a P*, %mngdmenghasilkan di MO^.


1
Saya lebih suka mengatakan mengapa tidak ^ mngd daripada * mngd .. Ini membingungkan tiba-tiba diizinkan untuk menggunakan simbol pointer yang tidak dikelola (*), bukan pointer yang dikelola (^) di depan sebenarnya variabel yang dideklarasikan dalam heap yang dikelola.
kerajinan

20

Ini berarti bahwa ini adalah referensi ke objek yang dikelola vs pointer C ++ reguler. Objek di belakang referensi tersebut dikelola oleh runtime dan dapat dipindahkan di memori. Mereka juga mengumpulkan sampah secara otomatis.


17

Ketika Anda mengalokasikan memori yang dikelola, memori itu dapat dipindahkan oleh pengumpul sampah. Operator ^ adalah penunjuk untuk memori yang dikelola, yang terus menunjuk ke tempat yang benar bahkan jika pengumpul sampah memindahkan objek yang ditunjuknya.




Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.