回答
句柄是参考由OS或库拥有的对象的间接方式。当操作系统或库拥有一个对象但想让客户端引用它时,它可以提供对该对象称为句柄的引用。
手柄可以用不同的方式来实现。通常它们不是C++或C#意义上的引用。通常它们是指向某种不透明类型的指针,或者它们可能(或包含)索引到操作系统或库所拥有的对象表中。
例如,在Windows中,如果您创建一个窗口,OS会创建一个代表该窗口的对象,但不会返回指向该对象的指针。相反,它返回一个窗口句柄,它提供了一个额外的间接层。当您在另一个OS调用中传递窗口句柄时,OS会根据句柄知道要使用哪个窗口对象。这可以防止你的代码直接访问窗口对象。
间接的额外层允许OS或库做的事情一样移动物体周围,引用计数的对象,一般控制会发生什么对象。与PIMPL成语一样,实现可能会完全更改,同时仍保留原始API,因此不会强制客户端重新编译。这是特别有用的,如果你要提供书面的程序语言如C.为客户一个非面向对象的API
句柄是指针像文件句柄,数据库连接手柄,手柄的窗户等非托管资源......由于它们的句柄非托管资源,在大多数情况下,他们不会被自动收集垃圾,你需要确保正确释放它们或者您可能会听到有关泄漏手柄。
+1在Windows操作系统中,通常它们是2字节的整数,在托管代码中,您可以使用它们IntPtr的。 – Jalal 2010-09-01 17:10:39
他们不一定是指针,虽然他们可以。它们是不透明的标识符。 – 2010-09-01 17:43:05
“handle”是参考的另一个名称,该名称由程序员显式管理,而不是由运行时自动管理。
- 1. getGlobalVisibleRect()究竟是什么?
- 2. Werkzeug究竟是什么?
- 3. 究竟是什么@ ViewDebug.ExportedProperty?
- 4. .parentNode究竟是什么?
- 5. Heroku究竟是什么?
- 6. session_hash究竟是什么?
- 7. 究竟是什么awakeFromNib?
- 8. 究竟是什么任务
- 9. cout/cin究竟是什么?
- 10. SKEmitterNode particleLifetime究竟是什么?
- 11. 代表究竟是什么?
- 12. 究竟是什么情景
- 13. 究竟是什么php.ini memory_limit?
- 14. 资源究竟是什么?
- 15. App Pool究竟是什么?
- 16. Erlang OTP究竟是什么?
- 17. NoSQL究竟是什么?
- 18. 雅典究竟是什么?
- 19. ContextStaticAttribute究竟是什么?
- 20. “OAuth Provider”究竟是什么?
- 21. 究竟是什么插座
- 22. targetSdkVersion究竟是什么?
- 23. CGContextRef究竟是什么?
- 24. cacert.pem究竟是什么?
- 25. ViewUserControl.ViewDataKey究竟是什么?
- 26. Apache Karaf究竟是什么?
- 27. 究竟CSS3是什么?
- 28. Windows AppFabric究竟是什么?
- 29. JSON究竟是什么?
- 30. Django Apps究竟是什么
什么是你听说过这个词的背景?这是一个非常普遍的术语,具有多重含义。 – 2010-09-01 17:09:08
可能的重复:http://stackoverflow.com/questions/1303123/what-is-a-handle-in-c – 2010-09-01 17:09:08