句柄是一个指向指针的指针。

一个指向指针的指针保存的是另一个指针的地址,我们可以通过第一个指针来找到另一个指针,然后通过另一个指针访问到具体的数据。

Windows 需要经常在物理内存和虚拟内存之间来回移动数据。数据被移动意味着他的地址发生变化,如果我们还用之前的地址来访问它,那么肯定是会出错的。如何解决这个问题?

为了解决这个问题,Windows 系统专门腾出一块内存空间来保存数据在内存中的地址变化,Windows 每次移动数据偶,都要把数据的新地址告知这个内存空间来保存。而记录地址变化的这块内存空间的地址是保持不变的。

我们把这个不变的地址叫作句柄。我们便可以通过改句柄找到数据的最新地址,然后访问该数据。

当然,每次重启程序的时候,Windows 操作系统分配的句柄都是不一样的,就像每次抽奖抽到的号码不同一样,但也有可能,不过几率太小。




参考:

《零点起学通C++》 P295 (316 / 861)