Sdílet prostřednictvím


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