Freigeben über


Nachverfolgungsverweisoperator (Komponentenerweiterungen für C++)

Ein Nachverfolgungsverweis (%) verhält sich wie ein normaler C++-Verweis (&) außer dass, wenn ein Objekt auf einen Nachverfolgungsverweis zugewiesen wird, wird der Verweiszähler des Objekts erhöht.

Alle Plattformen

Ein Nachverfolgungsverweis verfügt über die folgenden Eigenschaften.

  • Zuweisung eines Objekts auf einen Nachverfolgungsverweis veranlasst den Verweiszählerwert des - Objekts erhöht werden.

  • Ein systemeigenen Verweis (&). ist das Ergebnis, wenn Sie eine Dereferenzierung *.Ein Nachverfolgungsverweis (%) ist das Ergebnis, wenn Sie ein ^ dereferenzieren.Der einzige Unterschied zwischen &. und % ist, dass wo &. ein "unformatierter" Verweis, % ist ein Verweis-gezählter Verweis ist.Solange Sie ein % zu einem Objekt haben, bleibt das Objekt im Arbeitsspeicher beibehalten.

  • Der Memberzugriffsoperator von Punktdirektiven (.) wird verwendet, um ein Member des Objekts.

  • Ein Nachverfolgungsverweis kann nur auf dem Stapel deklariert werden.Ein Nachverfolgungsverweis kann kein Member einer Klasse sein.

  • Nachverfolgungsverweise sind für Werttypen und Handles gültig (beispielsweise String^).

  • Ein Nachverfolgungsverweis kann eine NULL-Zeichenfolge oder einen nullptr-Wert nicht zugewiesen werden.Ein Nachverfolgungsverweis wird zu einem anderen gültigen Objekt so oft nach Bedarf neu zugewiesen werden.

  • Ein Nachverfolgungsverweis kann nicht als unärer NehmenAdressenoperator verwendet werden.

Windows-Runtime

Ein Nachverfolgungsverweis verhält sich wie ein Verweis-gezählter Standard-C++-Verweis.Informationen zum C++-Verweise, finden Sie unter Verweise (C++).

Das folgende Beispiel zeigt, wie ein Nachverfolgungsverweis verwendet, um den Inhalt des - Objekts zu ändern sie zeigt zu.

/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

Sie können einen Nachverfolgungsverweis auf einem Handle verwenden, wenn Sie ein Objekt eines CLR-Typs auf dem Heap der Garbage Collection binden.

Im CLR wird der Wert einer Trackingverweisvariable automatisch aktualisiert, wenn der Garbage Collector das referenzierte Objekt verschoben wird.

Es ist nicht möglich, einen systemeigenen C++-Verweis auf ein Objekt auf dem Heap der Garbage Collection zu haben.

Weitere Informationen zu Nachverfolgungsverweise in C++/CLI, finden Sie unter:

8903062a.collapse_all(de-de,VS.110).gifBeispiele

Beispiel

Das folgende Beispiel zeigt, wie ein Nachverfolgungsverweis mit systemeigenen und verwalteten Typen verwendet.

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

Beispiel

Das folgende Beispiel zeigt, wie ein Nachverfolgungsverweis auf einem Array umschließt.

// 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]);
}

Ausgabe