c++ - : Handle, 指针和引用有什么区别

标签 c++ oop pointers reference handle

句柄与指向对象的指针有何不同?为什么我们不能有对引用的引用?

最佳答案

句柄通常是对对象的不透明引用。句柄的类型与引用的元素无关。例如,考虑 open() 系统调用返回的文件描述符。类型是 int 但它表示打开文件表中的一个条目。存储在表中的实际数据与 open() 返回的 int 无关,从而使实现不必维护兼容性(即可以透明地重构实际表不影响用户代码。句柄只能由同一库接口(interface)中的函数使用,可以将句柄重新映射回实际对象。

指针是内存中的地址和驻留在该内存位置的对象类型的组合。该值是地址,指针的类型告诉编译器可以通过该指针执行哪些操作,如何解释内存位置。指针是透明的,因为引用的对象具有指针中存在的具体类型。请注意,在某些情况下,指针可以用作句柄(void* 是完全不透明的,指向空接口(interface)的指针也是不透明的)。

引用是对象的别名。这就是为什么你不能有一个引用的引用:你可以有一个对象的多个别名,但你不能有一个别名的别名。与指针一样,引用是类型化的。在某些情况下,编译器可以将引用实现为在使用时自动取消引用的指针,在某些其他情况下,编译器可以具有没有实际存储的引用。重要的部分是它们是对象的别名,它们必须使用对象进行初始化,并且在初始化后不能重新定位以引用不同的对象。一旦它们被初始化,引用的所有使用都是对真实对象的使用。

关于c++ - : Handle, 指针和引用有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023405/

相关文章:

c++ - 如何使用 vector 或 map 存储不同字符的位置

c++ - 不同 so 文件中的相同函数名称以及链接到二进制文件的两个 so 文件

c++ - zeroc Ice serialize 非基元序列

perl - 如何创建 Perl 类?

java - C++ 等价于 java 的 instanceof

c# - 构建灵活且可重用的类层次结构

c++ - 将指针指向它的第一个成员是非法的吗?

c++ - 如何检测 QImage 是否具有动画效果?

c - 在 C 程序中定义指向函数的指针变量

c - C/C++ 中的 SQLite。 sqlite3_exec : parameter set in callback function is pointing to an empty string