托管代码中的指针

本文探讨了在.NET框架的托管代码中如何使用指针,包括类与结构体的区别,C++/CLI的支持,以及如何安全地进行指针操作以提高性能。同时,文章也讨论了指针在.NET中的限制和潜在风险。
摘要由CSDN通过智能技术生成
 
interior_ptr<type>
native pointer 的超集, native pointer 能做的, Interior pointer 也一样能做。当垃圾回收器移动对象时, Interior pointer 能随之移动,并始终指向该对象。
------ Pro Visual C++_CLI and the .NET 2.0 Platform p815
 
Interior _ptr 可以指向引用句柄、值类型、装箱类型句柄、托管类成员、托管数组的元素。 不能指向引用类型本身。
 
*ip ip 所值的类型 type 的值
&ip ip 指向托管堆中的地址
 
pin_ptr<type>
在外部调用托管堆中指针时,垃圾回收过程中该指针会发生改变,引起外部调用的错误。必须使用pin_ptr指针将该指针固定。
 
pinned pointer 可以指向引用句柄、值类型、托管数组的元素。 不能指向引用类型 ,但能指向引用类型的成员(不支持钉住由 new 表达式返回的整个对象。相反,需要钉住内部成员的地址。--MSDN)。可以完成native pointer的所有的功能,如指针比较和指针运算。
 
都不能由跟踪句柄直接赋值。而是必须由&操作符取地址。因为interior_ptr pin_ptr是独立的类,只能由地址赋值,而不能由托管类型赋值。
 
int ^ m_int = gcnew int(100);
interior_ptr <int> ipint = &*m_int; //ok
interior_ptr <int> ipint = m_int;   //error
Value  class  Vtest {}
Ref 
class  Rtest {}

Vtest 
^ vtest  =  gcnew Vtest;         // 值类型对象

pin_ptr
<  Vtest  >  pinp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值