interior_ptr (C++/CLI)

Um ponteiro interno declara um ponteiro para dentro de um tipo de referência, mas não para o objeto propriamente dito. Um ponteiro interno pode apontar para um identificador de referência, um tipo de valor, um identificador de tipo com conversão boxing, um membro de um tipo gerenciado ou um elemento de uma matriz gerenciada.

Todos os Runtimes

(Não há comentários para esse recurso de linguagem que se apliquem a todos os runtimes.)

Windows Runtime

(Não há comentários para esse recurso de linguagem que se apliquem somente ao Windows Runtime.)

Requisitos

Opção do compilador: /ZW

Common Language Runtime

O exemplo de sintaxe a seguir demonstra um ponteiro interno.

Sintaxe

cli::interior_ptr<cv_qualifier type> var = &initializer;

Parâmetros

cv_qualifier
Qualificadores const ou volatile.

tipo
O tipo de inicializador.

var
O nome da variável interior_ptr.

initializer
Um membro de um tipo de referência, um elemento de uma matriz gerenciada ou qualquer outro objeto que você possa atribuir a um ponteiro nativo.

Comentários

Um ponteiro nativo não é capaz de rastrear um item enquanto sua localização é alterada no heap gerenciado, o que é resultante da movimentação de instâncias de um objeto pelo coletor de lixo. Para que um ponteiro faça referência à instância corretamente, o runtime precisa atualizá-lo para o objeto recém-posicionado.

Um interior_ptr representa um superconjunto da funcionalidade de um ponteiro nativo. Portanto, qualquer coisa que possa ser atribuída a um ponteiro nativo também pode ser atribuída a um interior_ptr. Um ponteiro interno tem permissão para realizar o mesmo conjunto de operações que os ponteiros nativos, incluindo comparação e aritmética de ponteiros.

Um ponteiro interno só pode ser declarado na pilha. Um ponteiro interno não pode ser declarado como membro de uma classe.

Como ponteiros internos existem somente na pilha, a opção de obter o endereço de um ponteiro interno produz um ponteiro não gerenciado.

interior_ptr tem uma conversão implícita para bool, que permite seu uso em instruções condicionais.

Confira em pin_ptr mais informações sobre como declarar um ponteiro interno que aponta para um objeto que não pode ser movido no heap obtido pelo coletor de lixo.

interior_ptr está no namespace cli. Saiba mais em Namespaces da CLI, de plataforma e padrão.

Confira mais informações sobre ponteiros internos em

Requisitos

Opção do compilador: /clr

Exemplos

O exemplo a seguir mostra como declarar e usar um ponteiro interno em um tipo de referência.

// interior_ptr.cpp
// compile with: /clr
using namespace System;

ref class MyClass {
public:
   int data;
};

int main() {
   MyClass ^ h_MyClass = gcnew MyClass;
   h_MyClass->data = 1;
   Console::WriteLine(h_MyClass->data);

   interior_ptr<int> p = &(h_MyClass->data);
   *p = 2;
   Console::WriteLine(h_MyClass->data);

   // alternatively
   interior_ptr<MyClass ^> p2 = &h_MyClass;
   (*p2)->data = 3;
   Console::WriteLine((*p2)->data);
}
1
2
3

Confira também

Extensões de componentes para .NET e UWP