Udostępnij za pośrednictwem


Operator odwołania śledzenia (C++ Component Extensions)

Odwołanie śledzenia (%) zachowuje się jak zwykłe odniesienie C++ (&) z tym, że gdy obiekt jest przypisany do odwołania śledzenia, zwiększany jest licznik odwołań obiektu.

Wszystkie platformy

Odwołanie śledzenia ma następujące cechy.

  • Przypisanie obiektu do odwołania śledzenia powoduje, że licznik odwołań obiektu rośnie.

  • Odwołanie natywne (&) jest wynikiem, gdy użytkownik cofnie odwołanie *.Odwołanie śledzenia (%) jest wynikiem, gdy użytkownik cofnie odwołanie ^.Jedyną różnicą między & i % jest to, że gdy & jest odwołaniem „raw”, % jest zliczanym odwołaniem odniesienia.Tak długo, jak długo mają % do obiektu, obiekt pozostanie w pamięci.

  • Kropka jest używana jako operator dostępu do elementu członkowskiego (.) w celu uzyskania dostępu do członka obiektu.

  • Odwołanie śledzenia może być deklarowane tylko na stosie.Odwołanie śledzenia nie może należeć do klasy.

  • Śledzenie odwołań jest prawidłowe dla typów wartości i uchwytów (na przykład String^).

  • Odwołaniu śledzenia nie można przypisać wartości null ani wartości nullptr.Odwołanie śledzenia może zostać ponownie przypisane do innego prawidłowego obiektu dowolną liczbę razy.

  • Odwołania śledzenia nie można użyć jako operatora jednoargumentowego pobierania adresu.

Środowisko wykonawcze systemu Windows

Odwołanie śledzenia zachowuje się jak odwołanie zliczane odniesienia standardowego języka C++.Aby uzyskać więcej informacji na temat odwołań w języku C++, zobacz Odwołania (C++).

Poniższy przykład pokazuje, jak używać śledzenia odwołania do modyfikowania zawartości obiektu, na 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 śledzenia do uchwytu, gdy powiąże się obiekt typu CLR na stosie modułu odśmiecania pamięci.

W CL, wartość zmienna odniesienia śledzenia jest aktualizowana automatycznie, gdy moduł odśmiecania pamięci przenosi obiekt, do którego istnieje odwołanie.

Nie jest możliwe macierzyste odwołanie C++ do obiektu na stercie modułu odśmiecania pamięci.

Aby uzyskać więcej informacji dotyczących śledzenia odwołań w języku C++/CLI, zobacz:

Przykłady

Przykład

W poniższym przykładzie przedstawiono sposób użycia śledzenia odwołania z typami macierzystym i zarządzanym.

// 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ć śledzenie odwołania z tablicą.

// 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