我最近看到了几个实际做到这一点的开源项目;从函数返回一个不安全的指针,例如:“int * input = this.someIterator.GetUnsafePtr()”。为什么允许从函数内返回不安全的指针?
从我的理解,这必须是完全错误的。不安全的指针只能通过'固定'语句获得,当然从函数内部返回的指针不会再被固定(它们将'丢失'它们的声明范围),最终导致它们被垃圾收集。
但是后来我不记得编译器给出了有关这个的任何警告,那么为什么要使用一个固定的语句,如果你实际上可以有'unpinned'的指针遍布整个?
IntPtr不是跟踪指针。如果一个IntPtr引用一个托管对象,并且该对象被移动,则该指针不会被更新。 IntPtr和不安全的指针之间没有真正的区别,除了IntPtr符合CLS并且不是'不安全'。 – 2009-02-22 13:16:28