Operator odwołania śledzenia (C++ Component Extensions)
A Odwołanie śledzenia (%) zachowuje się jak zwykłe odwołanie C++ (&) chyba, że gdy obiekt jest przypisany do śledzenia odwołanie, jest zwiększany licznika odwołań tego obiektu.
Wszystkie platformy
Odwołanie śledzenia ma następujące właściwości.
Przypisanie obiektu do śledzenia odwołanie powoduje, że obiekt licznika jest zwiększana.
Odwołanie macierzystego (&) jest wynikiem, gdy użytkownik cofnięcia odwołania *.Odwołanie śledzenia (%) jest wynikiem, gdy użytkownik cofnięcia odwołania ^.Jedyną różnicą między & i % gdzie & jest to odwołanie "raw" % to odwołanie liczy odniesienia.Tak długo, jak masz % do obiektu, obiekt pozostanie w pamięci.
Dot (.) używany jest operator dostęp członek dostęp członek obiektu.
Odwołanie śledzenia może być deklarowany tylko na stosie.Odwołanie śledzenia nie może należeć do klasy.
Śledzenie odwołań są prawidłowe dla typów wartości i uchwyty (na przykład String^).
Odwołanie śledzenia nie można przypisać wartość null lub nullptr wartość.Odwołanie śledzenia może zostać przypisany do innego prawidłowego obiektu jako tyle razy, ile jest to wymagane.
Odwołanie śledzenia nie można używać jako operatora jednoargumentowego wziąć adres.
Środowisko wykonawcze systemu Windows
Odwołanie śledzenia zachowuje się jak odwołanie liczy odwołanie C++ standard.Aby uzyskać informacje o odwołaniach języka C++, zobacz Odwołania (C++).
Poniższy przykład pokazuje, jak używać śledzenia odwołanie do modyfikowania zawartości obiektu, który wskazuje.
/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
}
}
Środowisko uruchomieniowe języka wspólnego
Można użyć odwołania do śledzenia uchwytu, z obiektu typu CLR na stercie zebrane śmieci.
W CLR, wartość odniesienia śledzenia zmienna jest aktualizowana automatycznie przy każdym garbage collector przenosi obiekt do którego istnieje odwołanie.
Nie jest możliwe, że macierzystym C++ odwołanie do obiektu na stercie zebrane śmieci.
Aby uzyskać więcej informacji na temat śledzenia odwołań w C + +/ CLI, zobacz:
Jak: przekazywany za pomocą odwołania typu CLR , przy użyciu funkcji śledzenia odwołań
Jak: zapis funkcje szablonu, które macierzysty, wartość lub odwołanie parametrów
Przykłady
Przykład
Poniżej pokazano sposób użycia odwołanie śledzenia z typów macierzystych i zarządzanych.
// 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;
}
Przykład
Poniższy przykład pokazuje, jak powiązać śledzenia odwołanie do tablicy.
// 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]);
}
Dane wyjściowe