句柄和指针有什么区别

句柄和指针有什么区别

句柄和指针有什么区别


句柄实际上是一种指向某种资源的指针 , 但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据 。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全 。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄 , 平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存 。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作 。
句柄到底是什么句柄的分类句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节 。这个数字是一个对象的唯一标示,和对象一一对应 。这个对象可以是一个块内存 , 一个资源,或者一个服务的context(如 socket,thread)等等 。这个数字的来源可以有很多中,只要能保证和它代表的对象保持唯一对应就可以,比如可以用内存地址,也可以用句柄表的序号,或者干脆用一个自增ID,再或者用以上的值去异或一个常数 。
传统上操作系统内核和系统服务API都是 C 语言接口的,但是其内部设计理念上又是OO的,所以有对象概念却没有对应的语言语法支持 。句柄的作用就是在 C 语言环境下代替 C++ 的对象指针来用的 。
创建句柄就是构造 , 销毁句柄就是析构,用句柄调用函数相当于传入this指针 。如果有系统API是C++ 接口的 , 那么就没有句柄了 , 而是某个接口指针,IXXXPtr之类的,比如Windows的com ptr 。
【句柄和指针有什么区别】

    推荐阅读