句柄是什么?
如大家所了解的,句柄**(handle)** 的英文原意确实是 把手 的意思。在生活中我们打开了一个门把手,那么这个房间就向我们敞开。
放到编程中也是一样的道理。假设有一个资源是在一个房间里,而要进入这个房间,就需要打开门把手(句柄)。只有成功打开这个句柄后,才观察和操作我们指定的资源。

句柄使用示例
下面是以经典的 Windows 编程 为例,"读取文件":
这是一个经典的三步操作流程:
-
打开一个句柄,并检查是否成功
-
通过句柄对资源进行操作,如读写等等
-
关闭句柄,此后该资源不再被程序掌控
#include <stdio.h>
Windows 编程对很多类型都做了多层封装,如果去查看一下源码,会惊讶的发现其实 HANDLE 是一个 void 类型的指针:
typedef void *HANDLE;
虽然在 C 语言和 C++ 中对于 void 的具体归类和含义有一定的差别,但 void 都表示 "不含任何值" 这个概念是一致的。进一步的, void* 是一种特殊的指针,其并不局限于像上节示例中的指针一样与一种具体的类型有所关联,其可以与任何类型的地址进行关联。