C ++ CLI中的Native和Handle指针

时间:2012-01-19 21:38:50

标签: c++-cli

我想知道本机指针是否有任何指向托管堆的方式?我知道这将是一件危险的事情,因为堆压缩和GC周期改变了对象地址,但它仍然可能吗?一个例子将不胜感激。

此外,Handle(^)是否真的无法指向本机堆?

感谢。

1 个答案:

答案 0 :(得分:5)

是的,这是支持的,但指向的对象需要固定。您可以使用.NET的GCHandle :: Alloc()或使用C ++ / CLI pin_ptr<>类来完成此操作。将物体固定很长时间是不好的,它们给垃圾收集器带来了困难,因为它需要在路上的岩石周围工作。在调用本机代码时,固定很常见。

对本机堆中的块的跟踪引用(帽子)没有意义,它们只跟踪垃圾收集堆中的对象。