Compartilhar via


Operador de Referência de Acompanhamento (Extensões de Componentes C++)

Uma referência de rastreamento (%) se comporta como uma referência comum de C++)&(exceto que quando um objeto é atribuído a uma referência de rastreamento, contagem de referência de objeto é incrementada.

Todas as Plataformas

Uma referência de rastreamento tem as seguintes características.

  • A atribuição de um objeto a uma referência de rastreamento faz com que a contagem de referência de objeto seja incrementada.

  • Uma referência nativo (&) é o resultado quando você desreferencia para *.Uma referência de rastreamento (%) é o resultado quando você desreferencia um ^.A única diferença entre & e % que são onde é uma referência & “bruto” %, é de após uma referência.Como você tem um % a um objeto, o objeto ficará ativa na memória.

  • O operador de acesso a membro do ponto (.) é usada para acessar um membro objeto.

  • Uma referência de rastreamento pode ser declarada somente na pilha.Uma referência de rastreamento não pode ser um membro de uma classe.

  • Controlando referências são válidos para tipos de valor e trata (por exemplo String^).

  • Uma referência de rastreamento não pode ser atribuído um zero ou um valor de nullptr .Uma referência de rastreamento pode ser atribuída novamente a outro objeto válido quantas vezes forem necessárias.

  • Uma referência de rastreamento não pode ser usado como um operador unário de tomada- endereço.

Tempo de Execução do Windows

Uma referência de rastreamento se comporta como uma referência de padrão de após C++.Para obter informações sobre referências C++, consulte Referências (C++).

O exemplo a seguir mostra como usar uma referência de rastreamento para modificar o conteúdo do objeto que aponta para.

/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

Você pode usar uma referência de rastreamento a um identificador quando você associa a um objeto de um tipo CLR no heap lixo- coletado.

Em o CLR, o valor de uma variável de referência de rastreamento é atualizado automaticamente sempre que o coletor de lixo move o objeto referenciado.

Não é possível ter uma referência de nativo C++ para um objeto no heap lixo- coletado.

Para obter mais informações sobre referências de rastreamento em C++/CLI, consulte:

8903062a.collapse_all(pt-br,VS.110).gifExemplos

Exemplo

O exemplo a seguir mostra como usar uma referência de rastreamento com tipos nativos e gerenciados.

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

Exemplo

O exemplo a seguir mostra como associar uma referência de rastreamento para uma 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]);
}

Saída