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