C ++ / CLI'de düzeltme işareti ('^') ne anlama geliyor?


212

Bu kodla yeni karşılaştım ve birkaç Google araması bu gizemli (bana göre) sözdiziminin hiçbir açıklamasını getirmedi.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Düzeltme işareti ne anlama geliyor? (Bu gcnewbenim için de yeni ve bunu burada sordum .)


Yanıtlar:


176

Bu C ++ / CLI ve düzeltme kodu, C ++ / CLI terminolojisinde bir 'başvuru türüne' tanıtıcı ' adı verilen bir * (işaretçi)' nin yönetilen eşdeğeridir ( hala yönetilmeyen işaretçileriniz olabilir).

(Aardvark'a daha iyi terminolojiyi işaret ettiği için teşekkürler.)


5
("Yönetilmeyen başvuru") sözdizimi "&" varsayalım hala C ++ / CLI'da var mı?
Owen

C ++ / CLI normal C ++ 'nin bir uzantısıdır, bu yüzden evet - sadece yönetilmeyen referanslar için olsa da
1800 BİLGİ

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

Genel olarak, punctuator %için ^punctuator olarak &etmektir *. C ++ 'da tekli &operatör C ++ / CLI' da tekli %operatördür.

İken &ptrverim bir P*, %mngden verim MO^.


1
Ben yerine neden * mngd yerine ^ mngd söyleyebilirim .. Aniden yönetilen işaretçi (^), yönetilen yığın bildirilen değişkenin önünde yönetilen işaretçi (^) kullanmak için izin verilen aniden kafa karıştırıcı.
swcraft

20

Bu, normal bir C ++ işaretçisine karşı yönetilen bir nesneye başvuru olduğu anlamına gelir. Bu tür referansların arkasındaki nesneler çalışma zamanı tarafından yönetilir ve bellekte yeniden konumlandırılabilir. Ayrıca otomatik olarak çöp toplanırlar.


17

Yönetilen bellek ayırdığınızda, bu bellek çöp toplayıcı tarafından hareket ettirilebilir. ^ İşleci, çöp toplayıcı işaret ettiği nesneyi hareket ettirse bile doğru yeri göstermeye devam eden yönetilen bellek için bir işaretçidir .




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.