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 .)

Owen
sumber
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.)

Rob Walker
sumber
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^.

salomon
sumber
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.

Franci Penov
sumber
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.

Joel Coehoorn
sumber
3

Dalam C ++ / CLI itu berarti pointer dikelola. Anda dapat membaca lebih lanjut tentang ini (dan fitur C ++ / CLI lainnya) di sini:

http://en.wikipedia.org/wiki/C%2B%2B/CLI

Tandai Ingram
sumber
2

Ini berarti bahwa itu adalah referensi ke objek yang dikelola.

INFORMASI 1800
sumber