Operátor sledovacího odkazu (rozšíření komponent C++)
A Sledování odkaz (%) se chová jako běžná C++ reference (&) s výjimkou, že když objekt přiřazena sledovací odkaz, je zvýšen počet odkazů na objekt.
Všechny platformy
Sledovací odkaz má následující vlastnosti.
Přiřazení objektu sledovací odkaz způsobí, že je zvýšen počet odkaz na objekt.
Nativní odkaz (&) je výsledkem v případě, že je proto zrušit reference struktury *.Sledovací odkaz (%) je výsledkem v případě, že je proto zrušit reference struktury ^.Jediný rozdíl mezi & a %, kde & odkaz "raw" % je počítáno referenční odkaz.Co máte % na objekt, objekt zůstane naživu v paměti.
Tečka (.) operátor členský přístup slouží k přístupu k členu 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í odkaz nelze přiřadit null nebo nullptr hodnotu.Sledovací odkaz může znovu přiřazen jiný platný objekt tolikrát, kolikrát povinné.
Sledovací odkaz nelze použít jako unární operátor vzít adresu.
Windows Runtime
Sledovací odkaz se chová jako odkaz počítají referenční standard C++.Informace o odkazech C++ naleznete v tématu Odkazy (C++).
Následující příklad ukazuje, jak používat sledovací odkaz změnit obsah objekt, 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í, můžete použít sledovací odkaz na popisovač.
V modulu CLR hodnota sledování Reference proměnné je automaticky aktualizován při každém odkazovaný objekt přesune uvolňování.
Není možné mít nativní C++ odkaz na objekt na haldě uvolňování.
Další informace o sledování odkazů v C + +/ CLI, viz:
Příklady
Příklad
Následující příklad ukazuje, jak použít sledovací odkaz s nativní a spravované 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 svázat sledovací odkaz na matici.
// 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