什么是对象的句柄?它是指针吗?它是引用吗?它是指向指针的指针?它是什么?
句柄术语一般用来指获取另一个对象的方法——一个广义的假指针。这个术语是(故意的)含糊不清的。
含糊不清在实际中的某些情况下是有用的。例如,在早期设计时,你可能不准备用句柄来表示。你可能不确定是否将一个简单的指针或者引用或者指向指针的指针或者指向引用的指针或者整型标识符放在一个数组或者字符串(或其它键)以便能够以哈希表(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*算符(既然句柄的效果象指针,那么它可能看起来也象指针)。
分享到:
相关推荐
枚举内核对象句柄-易语言
将鼠标移到电脑屏幕上的任意位置,都会显示鼠标所在位置代表的对象的句柄。对于指定句柄的窗体,可以对其隐藏、显示、关闭等操作。
进程管理工具 可用来分析事件对象句柄.
可视对象句柄查看器VisualViewer.rar可视对象句柄查看器VisualViewer.rar可视对象句柄查看器VisualViewer.rar可视对象句柄查看器VisualViewer.rar
matlab数组矩阵
#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; }......
MATLAB图形对象句柄命令
matlab开发-获取所有图形对象的句柄。获取以根为基的对象句柄树
易语言源码易语言枚举内核对象句柄源码.rar
摘录并整理至iLoveMatlab论坛 详细汇总和分析了各种Matlab GUI 函数的句柄,并对其中部分内容进行了详细说明。资料宝贵! PS:CSDN采用贡献资源分下载,没分有钱的请至百度文库、豆丁网购买使用!
Wininfo是类似于SPY++的窗口信息查询工具,Wininfo省略了一点不必要的功能,使界面更加简化,直接锁定目标。程序中的顶级窗口枚举能将此窗口所在的顶级窗口的的所有窗口及控件信息全部枚举出来,省略了操作次数。
首先让我们来了解一下什么是内核对象。内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员如安全描述符和使用计数是...
绘图函数将不同的曲线或曲面绘制在图形窗口中,而图形窗口是由不同的对象(如:坐标轴、曲线、曲面、文字等)组成的图形界面。matlab给每个图形对象分配一个标识符,称为句柄。
matlab图形对象和句柄PPT教案学习.pptx
易语言位图句柄取位图模块源码,位图句柄取位图模块,NotifySys,运行时错误,取执行的文件名,位图句柄取数据,数据取位图句柄,解锁内存块,释放内存块,取内存块长度,锁定内存块,删除对象,取屏幕句柄
使用详解 图形对象和句柄PPT学习教案.pptx
本文件包含了实现句柄类的源文件,通常我们不能将基类和派生类对象同时存储在一个容器中,比如vector或者multiset,代码中通过利用句柄类解决了这个问题。详细解释可以参考博文...
通过窗口句柄获得IWebBrowser2和IHTMLDocument2接口,里面是源代码,分享给大家
演示了继承中的易错点,演示了两种常用C++句柄类的封装方式,前者适用于类的基类指针管理以便实现多态,后者不仅管理基类指针还管理子类对象的创建。