C++ CLI中的Native和Handle指针

Fra*_* Q. 1 c++-cli

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

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

谢谢.

Han*_*ant 5

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

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