interior_ptr (C++/CLI)

内部指针 声明一个指向的指针在引用类型中,但不为对象。 钉住指针可以指向句柄引用、值类型或装箱类型的托管类型的句柄、成员或托管数组的元素。

所有运行时

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

Windows Runtime — Windows 运行时

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

要求

编译器选项:/ZW

公共语言运行时

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

语法

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

请参见

概念

适用于运行时平台的组件扩展