句柄的真正理解

**真理一句話:句柄是引用,而不是指針。只能改變對應對象的內容,但不知道對象在哪。 **

以下內容摘取網上資源,如有違反作者版權,請通知。

句柄是用來標識項目的。(它就象我們的姓名一樣,每個人都會有一個,不同的人的姓名不一樣,但是,也可能有一個名字和你一樣的人。有一說法是指向指針的指針)
項目包括:模塊(module)、任務(task)、實例 (instance)、文件(file)、內存塊(block of memory)、菜單(menu)、控制(control)、字體(font)、資源(resource),包括圖標(icon),光標 (cursor),字符串(string)等、GDI對象(GDI object),包括位圖(bitmap),畫刷(brush),元文件(metafile),調色板(palette),畫筆(pen),區域 (region),以及設備描述表(device context)。
實質:
在windows中,句柄是和對象一一對應的32位無符號整數值。應用程序幾乎總是通過調用一個WINDOWS函數來獲得一個句柄,之後其他的WINDOWS函數就可以使用該句柄,以引用相應的對象。
形象說法:要想控制某一設備,不去直接控制設備,而是控制設備的操作手柄。
使用句柄的好處:
windows需要向程序員提供必要地編程接口,在這些接口中,允許程序員訪問、創建和銷燬對象。出於封裝地考慮,windows並不想向程序員返回指針。
句柄和對象映射:
在windows中,存在兩種映射方式
a. 全等映射,也即,句柄本身就是一個指針,映射在這裏只是類型轉換而已。這種情況有,進程實例句柄或模塊句柄,以及資源句柄等等
b. 基於表格的映射。這是對象指針與句柄之間最普通的映射機制。操作系統創建表格,並保存所有要考慮的對象。需要創建新對象時,要先在表格中找到空入口,然後把表示對象的數據添入其中。當對象被刪除時,它的數據成員和其在表中的入口被釋放。
句柄和指針的區別:句柄就是你的上smth的ID 通過這個id,無論你在那裏我都可以找到你, 但是指針就好像你上機的地方, 在這個地方,可以找到你, 但是你的id是不變化的 ,上機地方可以變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章