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:
Como: passar tipos CLR por referência com rastreamento de referências
Como: usar referências de rastreamento e ponteiros interiores
Como: escrever funções de modelo que usem nativas, valor ou parâmetros de referência
Exemplos
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