首先要分清是在什么地方讨论,在以前学C时,是这么区分的
(1)指针是对象在内存中的地址;
(2)引用是对象的别名,其实质就是功能受限但是安全性更高的指针;
(3)句柄是指针的指针,句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样。
Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。
其他:
引用必须总是引用一个对象,且引用所指向的对象在该引用初始化后不能改变(引用用所指向的对象不能改变,即不能指向另一个对象,引用所指向的对象呗释放后引用也必须被释放),指针可以指向空值;--参见《代码大全(第二版)》P332