interior_ptr (C++/CLI)
内部指针 声明为指向于引用类型,但是,不为对象。 内部指针可以指向句柄引用,值类型,装箱的类型处理,托管类型的成员,或者到托管数组的元素。
所有运行时
(不适用于所有运行时间。) 此语言功能的备注
运行时的窗口
(不适用于运行时仅的窗口。) 此语言功能的备注
要求
编译器选项: /ZW
公共语言运行时
以下语法示例演示内部指针。
语法
cli::interior_ptr<cv_qualifier type> var = &initializer;
参数
cv_qualifier
const 或 volatile 限定符。type
初始值设定项的类型。var
interior_ptr 变量的名称。初始值设定项
可以分配给本机指针的引用类型、组件的托管数组,或其他对象的成员。
备注
本机指针无法跟踪项目,因为其位置在托管堆更改,由对象的垃圾回收器移动实例。 为了正确引用的指针可实例,运行时需要更新指针到最近确定的对象。
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