interior_ptr (C++/CLI)

Un puntero interior declara un puntero al interior de un tipo de referencia, pero no al propio objeto. Un puntero interior puede apuntar a un manipulador de referencia, un tipo de valor, un manipulador de tipo al que se aplica la conversión boxing, el miembro de un tipo administrado o a un elemento de una matriz administrada.

Todos los runtimes

(No hay notas para esta característica de lenguaje que se apliquen a todos los runtimes).

Windows en tiempo de ejecución

(No hay notas para esta característica de lenguaje que solo se apliquen a Windows Runtime).

Requisitos

Opción del compilador: /ZW

Common Language Runtime

En el siguiente ejemplo de sintaxis se muestra un puntero interior.

Sintaxis

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

Parámetros

cv_qualifier
const o calificadores volatile.

type
El tipo de initializer.

var
El nombre de la variable interior_ptr.

initializer
Un miembro de un tipo de referencia, elemento de una matriz administrada o cualquier otro objeto que se pueda asignar a un puntero nativo.

Comentarios

Un puntero nativo no puede hacer el seguimiento de un elemento dado que su ubicación cambia en el montón administrado, lo que da lugar a que el recolector de elementos no utilizados mueva instancias de un objeto. Para que un puntero haga referencia correctamente a la instancia, el puntero se debe actualizar en tiempo de ejecución al objeto recién posicionado.

Una variable interior_ptr representa un supraconjunto de la funcionalidad de un puntero nativo. Por lo tanto, todo lo que se puede asignar a un puntero nativo también se puede asignar a una variable interior_ptr. Se permite que un puntero interior realice el mismo conjunto de operaciones que los punteros nativos, incluida la comparación y la aritmética de punteros.

Un puntero interior solo se puede declarar en la pila. No se puede declarar como miembro de una clase.

Puesto que los punteros interiores existen solo en la pila, al tomar la dirección de un puntero interior se produce un puntero no administrado.

interior_ptr tiene una conversión implícita a bool, lo que permite su uso en instrucciones condicionales.

Para información sobre cómo declarar un puntero interior que apunta a un objeto que no se puede mover en el montón de recolección de elementos no utilizados, consulte pin_ptr.

interior_ptr está en el espacio de nombres cli. Para más información, consulte Espacios de nombres de plataforma, predeterminado y CLI.

Para más información sobre los punteros interiores, consulte:

Requisitos

Opción del compilador: /clr

Ejemplos

En el ejemplo siguiente se muestra cómo declarar y usar un puntero interior en un tipo de referencia.

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

Consulte también

Extensiones de componentes de .NET y UWP