Поделиться через


interior_ptr (C++/CLI)

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

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

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

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

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

Требования

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

Среда CLR

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

Синтаксис

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

Параметры

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

type
Тип инициализатора.

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

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

Замечания

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

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

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

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

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

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

interior_ptr находится в пространстве имен CLI. Дополнительные сведения см. в статье Platform, default, and cli Namespaces (C++/CLI and C++/CX) (Пространства имен Platform, default и cli (C++/CLI и C++/CX)).

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

Требования

Параметр компилятора: /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);
}
1
2
3

См. также

Расширения компонентов для .NET и UWP