代码之家  ›  专栏  ›  技术社区  ›  Trap

为什么允许它从函数中返回不安全的指针?

  •  2
  • Trap  · 技术社区  · 17 年前

    我最近看到了一些开源项目,它们确实做到了这一点;从函数返回不安全的指针,例如:“int*input=this.someIterator.GetUnsafePtr()”。

    但是我也不记得编译器对此给出了任何警告,所以如果你真的可以将“unpinned”指针分散在各处,为什么还要麻烦使用固定语句呢?

    2 回复  |  直到 17 年前
        1
  •  3
  •   arul    17 年前

    怎么样 Marshal.AllocHGlobal Marshal.AllocCoTaskMem void * 使用 .ToPointer() 作用

    指针也可以来自非托管代码。你需要 fix/pin fixed/pinned 垃圾收集器可以自由移动它,从而导致指针无效。

        2
  •  2
  •   zihotki    17 年前

    我从未在开源项目中见过这样的构造。如果你能在你的问题中提供一些这种用法的例子会更好。它的意义可能取决于行为。
    但我同意,不安全指针是有害的,只有在与某些本机库或代码交互时才应该使用。

    编辑:
    @Stephen是对的,IntPtr不会保留对GC集合上对象的引用。