2010-09-01 273 views
5

我经常听到“手柄”,究竟是那些?“句柄”究竟是什么?

编辑: 比如我听说过: Windows处理 事件处理 文件句柄

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

+0

什么是你听说过这个词的背景?这是一个非常普遍的术语,具有多重含义。 – 2010-09-01 17:09:08

+0

可能的重复:http://stackoverflow.com/questions/1303123/what-is-a-handle-in-c – 2010-09-01 17:09:08

回答

5

句柄是参考由OS或库拥有的对象的间接方式。当操作系统或库拥有一个对象但想让客户端引用它时,它可以提供对该对象称为句柄的引用。

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

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

间接的额外层允许OS或库做的事情一样移动物体周围,引用计数的对象,一般控制会发生什么对象。与PIMPL成语一样,实现可能会完全更改,同时仍保留原始API,因此不会强制客户端重新编译。这是特别有用的,如果你要提供书面的程序语言如C.为客户一个非面向对象的API

1

句柄是指针像文件句柄,数据库连接手柄,手柄的窗户等非托管资源......由于它们的句柄非托管资源,在大多数情况下,他们不会被自动收集垃圾,你需要确保正确释放它们或者您可能会听到有关泄漏手柄

+0

+1在Windows操作系统中,通常它们是2字节的整数,在托管代码中,您可以使用它们IntPtr的。 – Jalal 2010-09-01 17:10:39

+1

他们不一定是指针,虽然他们可以。它们是不透明的标识符。 – 2010-09-01 17:43:05

5

“handle”是参考的另一个名称,该名称由程序员显式管理,而不是由运行时自动管理。