interior_ptr (C++/CLI)

内部指针声明指向引用类型内部,但不指向对象本身的指针。 内部指针可以指向引用句柄、值类型、装箱类型句柄、托管类型的成员或托管数组的元素。

所有运行时

(此语言功能没有适用于所有运行时的备注。)

Windows 运行时

(此语言功能没有只适用于 Windows 运行时的备注。)

要求

编译器选项:/ZW

公共语言运行时

以下语法示例演示内部指针。

语法

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

参数

cv_qualifier
constvolatile 限定符。

type
初始值设定项的类型。

var
interior_ptr 变量的名称。

initializer
可以分配给本机指针的引用类型、托管数组的元素或者任何其他对象的成员。

备注

本机指针无法跟踪项,因为其位置在托管堆上不断变化,这是由垃圾回收器移动对象实例引起的。 为了使指针正确指向实例,运行时需要将指针更新到新定位的对象。

interior_ptr 表示本机指针的功能超集。 因此,可以分配给本机指针的所有内容也可以分配给 interior_ptr。 内部指针允许执行与本机指针相同的操作,其中包括比较和指针算法。

内部指针只能在堆栈上声明。 内部指针无法声明为类的成员。

由于内部指针仅存在于堆栈,使用内部指针的地址会产生非托管指针。

interior_ptr 支持隐式转换为 bool,所以可用于条件语句

若要了解如何声明指向无法在垃圾回收堆上移动的对象的内部指针,请参阅 pin_ptr

interior_ptr 位于 cli 命名空间中。 有关详细信息,请参阅平台默认 cli 命名空间

有关内部指针的详细信息,请参阅

要求

编译器选项:/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 的组件扩展