句柄类谁能给给我个C++句柄类的示例代码,或者是句柄类这部分的教学视频呢,特急!!!

句柄类  时间:2021-07-06  阅读:()

一些电脑编程的句柄之类的是什么意思啊?

句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

WINDOWS句柄有点象C语言中的文件句柄。

  从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。

从数据类型上来看它只是一个16位的无符号整数。

应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

  如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。

我们知道,所谓指针是一种内存地址。

应用程序启动后,组成这个程序的各对象是住留在内存的。

如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。

但是,如果您真的这样认为,那么您就大错特错了。

我们知道,Windows是一个以虚拟内存为基础的操作系统。

在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。

对象被移动意味着它的地址变化了。

如果地址总是如此变化,我们该到哪里去找该对象呢?   为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。

Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。

这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。

这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

  句柄地址(稳定)→记载着对象在内存中的地址────→对象在内存中的地址(不稳定)→实际对象   本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

  但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。

假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。

句柄是什么意思?

楼上学的是什么句柄啊 所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。

WINDOWS句柄有点象C语言中的文件句柄。

从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。

从数据类型上来看它只是一个16位的无符号整数。

应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。

我们知道,所谓指针是一种内存地址。

应用程序启动后,组成这个程序的各对象是住留在内存的。

如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。

但是,如果您真的这样认为,那么您就大错特错了。

我们知道,Windows是一个以虚拟内存为基础的操作系统。

在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。

对象被移动意味着它的地址变化了。

如果地址总是如此变化,我们该到哪里去找该对象呢? 为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。

Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。

这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。

这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象 本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。

假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。

参考资料:/logs/2004/08/319589.html

谁能给给我个C++句柄类的示例代码,或者是句柄类这部分的教学视频呢,特急!!!

句柄类存储和 管理基类指针。

指针所指的对象的类型可以变化,即可以指向基类对戏那个又可以指向派生类类型对象。

用户通过句柄类访问继承层次的操纵。

因为句柄类使用指针 执行操作,虚成员的行为将在运行时根据句柄实际绑定的对象的类型而变化。

因此,句柄的用户可以获得动态行为但无需操心指针的管理。

包装了继承层次的句柄有两个重要的设计考虑因素 1、像对任何保存指针的类一样。

必须确定对复制控制做些什么。

包装了继承层次的句柄通常表现的像一个只能指针或像一个值。

2、句柄类决定句柄接口屏蔽还是不屏蔽继承层次,如果不屏蔽继承层次,用户必须了解和使用基本层次中的对象。

我们将定义名为Sale_item的指针型句柄类,表示Item_base层次,Sales_item的用户将像使用指针一样使用它:将用户Sals_item绑定到Item_base类型的对象并使用*和->操作符执行Item_base的操作。

例如:Sale_item item(Bulk_item(“0-102-34529”,35,4,43)); item-&_price();//item像是指针一样。

用户可以不必管理句柄指向的对象,Sales_item类将完成这部分工作。

当用户通过Sales_item类对像那个调用函数式,将获得多态行为。

Sales_item类将有两个数据成员,都是指针,一个指针将指向Item_base对戏那个,而另一个将指向使用计数,Item_base指针可以指 向Item_base 也可以指向Item_base 派生类类型的对象,通过指向使用计数,多个Sale_item对象可以共享同一个计数器。

class Sales_item { public: Sales_item():p(0),use(new size_t(1)){} Sales_item(const Item_base&); Sales_item(const Sales_item &i):p(i.p),use(i.use) { ++*use; } ~Sales_item(){dec_use();}; Sales_item& operator=(const Sales_item&); const Item_base *operator->()const{if(p) return p;} const Item_base& operator*()const{if(p) return *p;} private: Item_base *p; size_t *use; void dec_use() {if(--*use==0){delete p;delete use;}} }; Sales_item& Sales_item::operator=(const Sales_item& i) { ++*i.use; dec_use(); p=i.p; use=i.use; return *this; } 要实现Item_base对象的构造函数,必须首先解决一个问题:我们不知道给予构造函数的对象的实际类型,我们知道他是一个Item_base对象或者 是它的派生类的对象,句柄类经常需要在不知道对象的确切类型是分配一直对象的新副本。

解决这个问题的通用方法是定义虚操作进行赋值,我们称将该操作 clone class Item_base { public: virtual Item_base* clone()const { return new Item_base(*this); } }; class Bulk_item:public Item_base { public: Bulk_item* clont()const { return new Bulk_item(*this); } }; Sales_item::Sales_item(const Item_base &item):p(item.clone()),use(new size_t(1)){} 像默认构造函数一样,这个构造函数分配并初始化使用计数,它调用形参的clone产生那个对象的虚副本,如果实参是Item_base对象,则运行Item_base的clone函数。

如果是Bulk_item对象则执行它的clone函数。

轻云互联(19元)香港高防云服务器 ,美国云服务器

轻云互联成立于2018年的国人商家,广州轻云互联网络科技有限公司旗下品牌,主要从事VPS、虚拟主机等云计算产品业务,适合建站、新手上车的值得选择,香港三网直连(电信CN2GIA联通移动CN2直连);美国圣何塞(回程三网CN2GIA)线路,所有产品均采用KVM虚拟技术架构,高效售后保障,稳定多年,高性能可用,网络优质,为您的业务保驾护航。活动规则:用户购买任意全区域云服务器月付以上享受免费更换IP服...

Megalayer 香港CN2优化线路VPS主机速度和性能综合评测

对于Megalayer云服务器提供商在之前也有对于他们家的美国服务器和香港服务器进行过评测和介绍,但是对于大部分网友来说需要独立服务器和站群服务器并不是特别的普及,我们很多网友使用较多的还是云服务器或者VPS主机比较多。在前面也有在"Megalayer新增香港VPS主机 1GB内存 50GB SSD 2M带宽 月59元"文章中有介绍到Megalayer商家有新增香港CN2优化VPS主机。那时候看这...

CloudCone2核KVM美国洛杉矶MC机房机房2.89美元/月,美国洛杉矶MC机房KVM虚拟架构2核1.5G内存1Gbps带宽,国外便宜美国VPS七月特价优惠

近日CloudCone发布了七月的特价便宜优惠VPS云服务器产品,KVM虚拟架构,性价比最高的为2核心1.5G内存1Gbps带宽5TB月流量,2.89美元/月,稳定性还是非常不错的,有需要国外便宜VPS云服务器的朋友可以关注一下。CloudCone怎么样?CloudCone服务器好不好?CloudCone值不值得购买?CloudCone是一家成立于2017年的美国服务器提供商,国外实力大厂,自己开...

句柄类为你推荐
0x800700050x80070005拒绝访问主要是什么问题移动测速什么是流动测速settimermfc里SetTimer和Sleep有什么区别oncontextmenuAndroid:onMenuItemSelected()方法与onOptionsItemSelected()方法有什么区别?rdlregardless是什么意思mindmanager破解版求mindmanager 2019 的注册机备忘录模式为什么我的华为手机界面总是有个框框在备忘录上面保留两位有效数字物理中保留两位有效数字是保留小数点后的两位还是从小数点前不是0的数开始保留两位?faq是什么意思fans是什么意思?layoutsubviews如何让NSSplitView的子View的大小固定
合肥虚拟主机 虚拟主机排名 中国万网虚拟主机 火山主机 lamp安装 google镜像 webhostingpad 搬瓦工官网 哈喽图床 lighttpd 中国电信测速112 日本bb瘦 网站cdn加速 免费智能解析 hdd 酷番云 支持外链的相册 跟踪路由命令 架设邮件服务器 主机管理系统 更多