句柄与指向对象的指针有何不同,为什么我们不能引用引用呢?
解决方法
句柄通常是对象的不透明引用.句柄的类型与引用的元素无关.考虑例如open()系统调用返回的文件描述符.该类型是int,但它表示打开文件表中的条目.存储在表中的实际数据与open()返回的int无关,使实现不必维护兼容性(即,实际的表可以透明地重构而不影响用户代码.句柄只能由相同的库接口,可以将句柄重新映射回实际对象.
指针是内存中的地址和位于该内存位置的对象类型的组合.值是地址,指针的类型告诉编译器可以通过该指针执行哪些操作,如何解释内存位置.指针是透明的,因为引用的对象具有从指针中存在的具体类型.请注意,在某些情况下,指针可以用作句柄(void *完全不透明,指向空接口的指针也是不透明的).
引用是对象的别名.这就是为什么你不能引用引用:你可以有一个对象的多个别名,但你不能有一个别名的别名.与指针一样键入引用.在某些情况下,引用可以由编译器实现,作为在使用时自动取消引用的指针,在某些其他情况下,编译器可以具有没有实际存储的引用.重要的部分是它们是对象的别名,它们必须用对象初始化,并且在初始化之后不能重新引用其他对象.一旦它们被初始化,引用的所有使用都是真实对象的使用.