Udostępnij za pośrednictwem


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:

8903062a.collapse_all(pl-pl,VS.110).gifPrzykł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