我经常听说过“手柄”,究竟是什么?
编辑: 比如我听说过: 窗户把手 事件句柄 文件句柄
等等。那些东西是一样的吗?或者它们是一些抽象的术语?
答案 0 :(得分:5)
“句柄”是资源的引用的另一个名称,由程序员显式管理,而不是由运行时自动管理。
答案 1 :(得分:5)
句柄是引用OS或库拥有的对象的间接方式。当操作系统或库拥有一个对象但想让客户端引用它时,它可以提供对该对象的引用,称为句柄。
手柄可以以不同方式实施。通常它们不是C ++或C#意义上的引用。它们通常是转换为某种opaque类型的指针,或者它们可能是(或包含)操作系统或库所拥有的对象表的索引。
例如,在Windows中,如果创建窗口,操作系统会创建一个表示窗口的对象,但它不会返回指向该对象的指针。相反,它返回一个窗口句柄,它提供了一个额外的间接层。当您在另一个OS调用中返回窗口句柄时,操作系统根据句柄知道要使用哪个窗口对象。这可以防止您的代码直接访问窗口对象。
额外的间接层允许操作系统或库执行诸如移动对象,引用计数对象以及通常控制对象发生的事情之类的操作。与PIMPL惯用法一样,实现可能会完全改变,同时仍然保留原始API,因此不会强制客户端重新编译。如果您尝试为使用C等过程语言编写的客户端提供非面向对象的API,那么它将特别有用。
答案 2 :(得分:1)
句柄是非托管资源的指针,如文件句柄,数据库连接句柄,窗口句柄等等......由于它们是非托管资源的句柄,在大多数情况下它们不会自动被垃圾收集,您需要确保正确释放他们或您可能听说泄漏处理。