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

“把手”到底是什么?

  •  5
  • kofucii  · 技术社区  · 14 年前

    我经常听说“把手”,那到底是什么?

    编辑: 例如,我听说过: 窗口句柄 事件句柄 文件句柄

    等等。这些东西是一样的吗?或者是一些抽象的术语?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Adrian McCarthy    14 年前

    句柄是引用操作系统或库所拥有的对象的间接方法。当操作系统或库拥有一个对象,但希望让客户机引用它时,它可以提供对该对象的引用,称为句柄。

    句柄可以用不同的方式实现。通常它们不是C++或C语言意义上的引用。它们通常是转换为某种不透明类型的指针,或者可能是(或包含)操作系统或库所拥有的对象表的索引。

    例如,在Windows中,如果创建一个窗口,操作系统将创建一个表示该窗口的对象,但不会返回指向该对象的指针。相反,它返回一个窗口句柄,它提供了一个额外的间接层。当您在另一个操作系统调用中传递窗口句柄时,操作系统会根据该句柄知道要使用哪个窗口对象。这会阻止代码直接访问窗口对象。

    额外的间接层允许操作系统或库执行诸如四处移动对象、引用计数对象以及一般控制对象发生的事情。与PIMPL习惯用法一样,实现可能会完全更改,同时仍然保留原始API,因此不会强制客户端重新编译。如果您试图为使用C等程序语言编写的客户机提供一个非面向对象的API,那么它尤其有用。

        2
  •  5
  •   maerics    14 年前

    “handle”是 参考 到由程序员显式而不是由运行时自动管理的资源。

        3
  •  1
  •   Darin Dimitrov    14 年前

    句柄是指向非托管资源的指针,如文件句柄、数据库连接句柄、Windows句柄等…因为它们是非托管资源的句柄,在大多数情况下,它们不会被自动垃圾收集,所以您需要确保正确地释放它们,否则您可能会听说 漏水把手 .