2010-09-01 154 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」是參考的另一個名稱,該名稱由程序員顯式管理,而不是由運行時自動管理。