interior_ptr (C++/CLI)

Внутренний указатель объявляет указатель внутрь ссылочного типа, но не на сам объект. Внутренний указатель может указывать на дескриптор ссылки, тип значения, дескриптор упакованного типа, член управляемого типа или на элемент управляемого массива.

Все среды выполнения

(Отсутствует комментарий для этой функции языка, которая применяется ко всем средам выполнения).

среда выполнения Windows

(Отсутствуют комментарии для этой функции языка, которая применяется только в среде выполнения Windows).

Требования

Параметр компилятора: /ZW

Среда CLR

В следующем примере синтаксиса показан внутренний указатель.

Синтаксис

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

Параметры

  • cv_qualifier
    Квалификаторы const или volatile.

  • type
    Тип initializer.

  • var
    Имя переменной interior_ptr.

  • initializer
    Элемент ссылочного типа, элемент управляемого массива или любой другой объект, которому может быть присвоен собственный указатель.

Примечания

Собственный указатель не может отслеживать элемент, если его расположение изменилось в управляемой куче, что является результатом перемещения сборщиком мусора экземпляров объекта. Для того, чтобы указатель правильно ссылался на экземпляр, среде выполнения необходимо обновить указатель на вновь расположенный объект.

interior_ptr представляет надмножество функциональности собственного указателя. Таким образом, все, что можно присвоить собственному указателю, можно также присвоить interior_ptr. Внутреннему указателю разрешено выполнять тот же набор операций, что и собственному указателю, включая сравнение и вычисления с указателями.

Внутренний указатель можно объявлять только в стеке. Внутренний указатель не может быть объявлен как член класса.

Поскольку внутренние указатели существуют только в стеке, взятие адреса внутреннего указателя вызывает неуправляемый указатель.

interior_ptr неявно преобразуется в bool, который позволяет использовать его в условных выражениях.

Дополнительные сведения об объявлении внутреннего указателя, указывающего на объект, который нельзя переместить в куче со сбором мусора, см. в разделе pin_ptr.

interior_ptr находится в пространстве имен CLI. Дополнительные сведения см. в разделе Пространства имен platform, default и cli (расширения компонентов C++).

Дополнительные сведения о внутренних указателях см. в

Требования

Параметр компилятора: /clr

Примеры

Пример

В следующем примере показаны способы объявления и использования внутреннего указателя на ссылочный тип.

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

Output

123

См. также

Основные понятия

Расширения компонентов для платформ среды выполнения