什么是对象的句柄?它是指针吗?它是引用吗?它是指向指针的指针?它是什么?
句柄术语一般用来指获取另一个对象的方法——一个广义的假指针。这个术语是(故意的)含糊不清的。
含糊不清在实际中的某些情况下是有用的。例如,在早期设计时,你可能不准备用句柄来表示。你可能不确定是否将一个简单的指针或者引用或者指向指针的指针或者指向引用的指针或者整型标识符放在一个数组或者字符串(或其它键)以便能够以哈希表(hash-table)(或其他数据结构)或数据库键或者一些其它的技巧来查询。如果你只知道你会需要一些唯一标识的东西来获取对象,那么这些东西就被称为句柄。
因此,如果你的最终目标是要让代码唯一的标识/查询一个Fred类的指定的对象的话,你需要传递一个Fred句柄这些代码。句柄可以是一个能被作为众所周知的查询表中的键(key)来使用的字符串(比如,在std::map 或 std::map中的键),或者它可以是一个作为数组中的索引的整数(比如,Fred* array = new Fred[maxNumFreds]),或者它可以是一个简单的 Fred*,或者它可以是其它的一些东西。
初学者常常考虑指针,但实际上使用未初始化的指针有底层的风险。例如,如果Fred对象需要移动怎么办?当Fred对象可以被安全删除时我们如何获知?如果Fred对象需要(临时的)连续的从磁盘获得怎么办?等等。这些时候的大多数,我们增加一个间接层来管理位置。例如,句柄可以是Fred**,指向Fred*的指针可以保证不会被移动。当Fred对象需要移动时,你只要更新指向Fred*的指针就可以了。或者让用一个整数作为句柄,然后在表或数组或其他地方查询Fred的对象(或者指向Fred对象的指针)。
重点是当我们不知道要做的事情的细节时,使用句柄。
使用句柄的另一个时机是想要将已经完成的东西含糊化的时候(有时用术语magic cookie也一样,就像这样,“软件传递一个magic cookie来唯一标识并定位适当的Fred对象”)。将已经完成的东西含糊化的原因是使得句柄的特殊细节或表示物改变时所产生的连锁反应最小化。举例来说,当将一个句柄从用来在表中查询的字符串变为在数组中查询的整数时,我们可不想更新大量的代码。
当句柄的细节或表示物改变时,维护工作更为简单(或者说阅读和书写代码更容易),因此常常将句柄封装到类中。这样的类常重载operator-> 和 operator*算符(既然句柄的效果象指针,那么它可能看起来也象指针)。
分享到:
相关推荐
在计算机编程领域,尤其是涉及到操作系统级别的操作时,"内核对象句柄"是一个重要的概念。易语言,一种中文编程环境,提供了对系统底层资源管理的支持,包括枚举内核对象句柄的功能。本文将深入探讨这个主题,帮助你...
MATLAB图形对象句柄是MATLAB图形编程的核心概念,它允许用户对图形进行精确控制,包括创建、修改和管理各种图形元素,如图形窗口、坐标轴、线条、填充区域等。在本章习题中,主要涉及以下几个知识点: 1. **图形...
事件对象句柄则是Windows操作系统中的一种同步机制,用于线程间的通信和资源协调。在本主题中,我们将深入探讨这两个概念以及如何使用特定的进程管理工具来分析事件对象句柄。 首先,我们来理解什么是进程。在...
在Windows操作系统中,"对象句柄"是一种标识和引用系统资源的方式,比如窗口、控件、设备、线程或者进程等。句柄并不是资源的直接地址,而是一个唯一的整数值,由操作系统分配并管理。在标题"获得鼠标位置的对象的...
- `gcbo`: 返回当前执行回调函数的对象句柄,这可以是任何图形对象。 - `gco`: 获取最近一次鼠标操作所选中的对象句柄。 2. **图形句柄属性操作**: - `get(h)`: 返回句柄`h`对应图形对象的所有属性名称及其当前...
在易语言中,"枚举"和"内核对象句柄"是两个重要的概念,它们在操作系统编程中起着至关重要的作用。 首先,我们来看"枚举"。枚举在编程中通常用来定义一组相关的常量,这些常量具有固定的值并且在程序中具有特定的...
首先,让我们了解什么是图形对象句柄。在MATLAB中,每个创建的图形对象都有一个唯一的句柄值,通过这个句柄,我们可以直接与对象进行交互。例如,`figure`函数创建一个新的图形窗口并返回其句柄,`plot`函数创建图线...
句柄的具体含义受 M$ 的帮助文档以及很多 Windows 编程书籍的影响,大家对句柄的认识是:句柄是一个整数,用以标识 Windows 对象,句柄不是一个指针。但实际上,这些不过是 M$ 进行数据封装的幌子而已。 句柄的定义...
### 什么是句柄 在计算机科学领域,句柄(Handle)是一个重要的概念,尤其是在操作系统和编程语言中。从直观的角度理解,句柄就像一个“把手”,通过它,我们可以轻松地“抓取”和操作背后复杂的数据结构或资源,而...
在Windows中,每个对象(如文件、窗口、线程、进程等)都有一个唯一的标识符,称为对象句柄。进程句柄就是进程对这些对象的引用,通过句柄,进程可以访问和操作对象。句柄不仅包含了对象的唯一ID,还包含了访问权限...
"可视对象句柄查看器VisualViewer"是一款专用于Windows操作系统中的工具,主要用于帮助开发者和系统管理员查看、管理和分析系统中的可视对象句柄。在Windows编程中,句柄是一种标识符,用于唯一地引用操作系统中的...
首先,我们要理解什么是句柄。在Windows操作系统中,句柄是一种标识符,用于唯一地引用系统中的对象,如进程、线程、窗口、文件、设备等。句柄是操作系统内部使用的32位或64位无符号整数,它不是对象本身,而是指向...
在本章中,我们主要探讨的是MATLAB中的图形对象句柄及其在图形窗口和坐标轴上的应用。 1. **图形对象及其句柄**: - **图形对象**:在MATLAB中,每个图形元素如曲线、图像、文本等都是一个图形对象,它们构成了一...
在MATLAB中,图形对象句柄是用于控制和操作图形元素(如图形窗口、轴、图像等)的关键概念。句柄允许用户创建、修改和管理图形界面,实现交互式编程。 "MATLAB图形对象句柄命令"主要涉及以下几个方面: 1. **创建...
- **HGDIOBJ**是一个通用的GDI对象句柄类型,它可以表示任何类型的GDI对象。在内部,`HPEN`的实际编译类型会根据编译器的设置有所不同: - 如果定义了`STRICT`宏,则`HPEN`是指向具有一个未使用字段的结构的指针。 ...
#include using namespace std; class Count { public: //public data is dangerous //sets the value of private data member x void setX(int value) { x = value; }......
`findobj`函数是查找具有特定属性值的对象句柄的工具,它允许用户从根对象开始遍历整个对象树。例如,如果你想要移动特定的文本对象,你需要首先通过属性定位到该对象,然后使用句柄更新其`Position`属性。 句柄还...
其次,可以使用`findobj`函数根据属性值查找对象句柄,这对于查找具有特定特征的对象非常有用。例如,要移动文本对象,先找到该对象的句柄,然后修改其`Position`属性。 句柄不仅用于查询,还能执行对象的操作。`...
在Windows编程中,句柄(Handle)是一个至关重要的概念,它是操作系统用来唯一标识系统资源如窗口、内存块、文件、GDI对象等的一种抽象标识符。句柄并不是资源的实际地址,而是一个由操作系统分配的整数值,用于在...