Operátor sledovacího odkazu (rozšíření komponent C++)
Sledovací reference (%) se chová jako běžná reference C++ (&) s výjimkou toho, že když objekt přiřazen sledovacímu odkazu, je zvýšen počet odkazů na objekt.
Všechny platformy
Sledovací odkaz má následující vlastnosti.
Přiřazení objektu do sledovacího odkazu způsobí, že počet odkazů na objekt bude zvýšen.
Nativní odkaz (&) je výsledkem v případě, že přestoupíte *.Sledovací odkaz (%) je výsledkem v případě, že přestoupíte ^.Jediný rozdíl mezi & a % je, že & je "nezpracovaný" odkaz a % je odkaz počítaný odkazy.Dokud máte % na objekt, objekt zůstane zachován v paměti.
Operátor přístup člena tečka (.) slouží k přístupu k člena objektu.
Sledovací odkaz lze deklarovat pouze v zásobníku.Sledovací odkaz nemůže být členem třídy.
Sledovací odkazy jsou platné pro typy hodnot a popisovače (například String^).
Sledovacímu odkaz nelze přiřadit hodnotu null nebo nullptr.Sledovací odkaz může být přeřazen jinému platnému objektu tolikrát, kolikrát to bude nutné.
Sledovací odkaz nelze použít jako unární operátor pro převzetí adresy.
prostředí Windows Runtime
Sledovací odkaz se chová jako odkaz počítají referenční standard C++.Další informace o referencích C++ naleznete v části Odkazy (C++).
Následující příklad ukazuje, jak použít sledovací odkaz k úpravě obsahu objektu, na který odkazuje.
/ZW
using namespace Platform;
int main()
{
array<String^> ^arr = ref new array<String^>(10);
int i = 0;
for(int i = 0; i < 10; ++i){
String^& s = arr[i];
s = i++.ToString(); // changes the array content
}
}
Common Language Runtime
Pokud svážete objekt typu CLR na haldě uvolňování paměti, můžete použít sledovací odkaz na popisovač.
V modulu CLR se proměnná sledovacího odkazu automaticky aktualizuje pokaždé, když uvolňování paměti přesune odkazovaný objekt.
Není možné mít nativní odkaz C++ na objekt na haldě uvolňování paměti.
Další informace o sledování odkazů v C++/ CLI naleznete v části:
Příklady
Příklad
Následující příklad ukazuje, jak použít sledovací odkaz s nativními a spravovanými typy.
// tracking_reference_1.cpp
// compile with: /clr
ref class MyClass {
public:
int i;
};
value struct MyStruct {
int k;
};
int main() {
MyClass ^ x = ref new MyClass;
MyClass ^% y = x; // tracking reference handle to reference object
int %ti = x->i; // tracking reference to member of reference type
int j = 0;
int %tj = j; // tracking reference to object on the stack
int * pi = new int[2];
int % ti2 = pi[0]; // tracking reference to object on native heap
int *% tpi = pi; // tracking reference to native pointer
MyStruct ^ x2 = ref new MyStruct;
MyStruct ^% y2 = x2; // tracking reference to value object
MyStruct z;
int %tk = z.k; // tracking reference to member of value type
delete[] pi;
}
Příklad
Následující příklad ukazuje, jak vytvořit vazbu sledovacího odkazu na pole.
// tracking_reference_2.cpp
// compile with: /clr
using namespace System;
int main() {
array<int> ^ a = ref new array< Int32 >(5);
a[0] = 21;
Console::WriteLine(a[0]);
array<int> ^% arr = a;
arr[0] = 222;
Console::WriteLine(a[0]);
}
Výsledek