每一个进程都有一个句柄列表数组,由Windows管理,比如你GetStockObject后,Windows还是会拷一份到你的进程中,但是再次GetStockObject同一个,是直接返回已经存在的索引,注意是索引,比如,你打开一个文件,成功你会发现返回值是一个立即数,比如15,这就是当前句柄数组中这个物件的索引,Windows在操作句柄时,比如使用ReadFile,hFile,这个hFile是15,Windows读取句柄列表中第15个元素,如果为空,返回失败,成功,再去操作对应的地址.而Windows在退出时会扫描这个句柄数组,将它们全部释放.几乎所有的句柄都是在这个数组中的,只不过每一个元素都有一个结构体,表示是文件句柄/线程句柄/GDI等等。

而CreateClipRgn,这个函数前是Create而不是Get,那么必须删除,否则会有资源泄漏。

而GetStockObject/LoadBitmap/LoadIcon之类,在第一次使用时会分配内存返回句柄,之后则是直接返回的。所以不需要删除,你要删除也是可以的,不过删除后下次又会分配/载入,浪费运行时间。

所以,句柄其实是句柄数组中的索引,而对应索引中的元素才是保存地址的一个标识对象的结构体。

这就是句柄..