Compartir a través de


Operador de referencia de seguimiento (Extensiones de componentes de C++)

Una referencia de seguimiento (%) se comporta como una referencia normal de C++ (&) excepto que cuando se asigna un objeto a una referencia de seguimiento, se incrementa el recuento de referencias del objeto.

Todas las plataformas

Una referencia de seguimiento tiene las siguientes características.

  • La asignación de un objeto a una referencia de seguimiento hace que el recuento de referencias del objeto que se incrementará.

  • Una referencia nativa (y) es el resultado cuando se desreferencia a *.Una referencia de seguimiento (%) es el resultado cuando se desreferencia un ^.La única diferencia entre y % es donde se referencia “sin formato”, % es una referencia referencia- contada.Siempre que tenga un % a un objeto, el objeto permanecerá activo en memoria.

  • Se utiliza el operador de acceso a miembros de punto (.) para tener acceso a un miembro del objeto.

  • Una referencia de seguimiento sólo se puede declarar en la pila.Una referencia de seguimiento no puede ser un miembro de una clase.

  • Siguiendo referencias es válido para los tipos de valor y los identificadores (por ejemplo String^).

  • Una referencia de seguimiento no se puede asignar una null o un valor nullptr .Una referencia de seguimiento puede reasignarse a otro objeto válido tantas veces como sea necesario.

  • Una referencia de seguimiento no se puede utilizar como un operador unario de la toma- dirección.

Windows en tiempo de ejecución

Una referencia de seguimiento se comporta como una referencia estándar referencia- contada de C++.Para obtener información sobre las referencias de C++, vea Referencias (C++).

El ejemplo siguiente se muestra cómo usar una referencia de seguimiento para modificar el contenido del objeto que elija.

/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

Puede utilizar una referencia de seguimiento a un identificador cuando se enlaza a un objeto de un tipo CLR en la pila basura- obtenida.

En CLR, el valor de una variable de referencia de traza se actualiza automáticamente siempre que el recolector de elementos no utilizados mueva el objeto de referencia.

No es posible tener una referencia de C++ nativo a un objeto en la pila basura- obtenida.

Para obtener más información acerca de las referencias de traza en C++/CLI, vea:

8903062a.collapse_all(es-es,VS.110).gifEjemplos

Ejemplo

El ejemplo siguiente se muestra cómo usar una referencia de seguimiento con código nativo y los tipos administrados.

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

Ejemplo

El ejemplo siguiente se muestra cómo enlazar una referencia de seguimiento en una matriz.

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

Output