句柄类c++ primer 第15章 句柄类 Sales_item 到底有什么用,要怎么调用这个类呢?

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

句柄是什么东西?

在程序设计中,句柄(handle)是一种特殊的智能指针。

当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。

句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。

这种间接访问对象的模式增强了系统对引用对象的控制。

通俗的说就是我们调用句柄就是调用句柄所提供的服务,即句柄已经把它能做的操作都设定好了,我们只能在句柄所提供的操作范围内进行操作,但是普通指针的操作却多种多样,不受限制。

句柄是什么

句柄就是用来区分各种内存对象的唯一标识符号,是个32位整数。

有些是整个系统唯一(如窗口句柄),有些是当前进程或线程中唯一 (如线程句柄,全局的有另一个标识符)。

详细的可分为许多种,都是以H开头的。

在VB中使用时全部都用Long。

常见的有窗口句柄(HWND),设备描述表句柄(HDC),内存句柄(HMEM), 文件句柄,进程句柄,线程句柄,笔的类型句柄(HPEN),字体句柄(HFONT), 区域句柄(HRGN)等等。

在申请句柄时是要占用资源的,分三类SYSTEM、USER、GDI。

而WINDOWS的资源是固定的,并不随内存的扩大而扩大,所以使用完以后一定要释 放。

> 如果只用VB本身的代码一般是不会用到句柄的,但要是使用API函数的话, 大多数会使用。

再Windows系统中,句柄(我一直觉得这个词翻译得特别别扭)分为三大类:Kernel Handle、UserHandle和应用程序自定义的Handle。

KernelHandle实际上是进程内Kernel对象的指针表索引,Kernel对象包括进程、文 件、信号等。

但是MS为了掩盖着一事实,在系统启动时生成了一个所谓Obsfucator的值 (其实应该是Obfuscator,MicrosoftBugs(R):),生成Handle后将Handle与这个值异 或后返回给应用程序,所以看到的Handle都是一些很大而且毫无意义的数字。

这些 Handle和索引的对象是由KRNL32.DLL和VMM32.VXD共同管理的,所以称之为Kernel Handle。

UserHandle是用来标示窗口、DC等对象的,他们是真实的指针,但指向的并不是对象 的开头,有一个偏移量。

同样,这些对象是由USER32.DLL管理的。

第三种Handle不过是应用程序自定义的一些索引之类的东东,具体的意义和应用程序相关

什么是句柄,常用的句柄有什么,使用句柄的好处是什么?

#include<iostream.h> #include<string.h> class person { protected: char *name; int age; public: person(); person(char*sname,int sage); ~person(); void show(); }; person::person() { name=new char[10]; strcpy(name,"no name"); age=0; cout<<"person类的无参构造函数"<<endl; } person::person(char *sname,int sage) { name=new char[strlen(sname)+1]; strcpy(name,sname); age=sage; cout<<"person类的有参构造函数已经执行"<<endl; } person::~person() { delete[]name; cout<<"person类的析构函数已经执行"<<endl; } void person::show() { cout<<"姓名:"<<name<<" "<<"年龄:"<<age<<" "; } class student:public person { protected: int no; public: student(); student(char *sname,int sage,int no); ~student(); void show(); }; student::student() { no=0; cout<<"student类的无参构造函数已经执行"<<endl; } student::student(char *sname,int sage,int sno):person(sname,sage) { no=sno; cout<<"student类的有参构造函数已经执行"<<endl; } student::~student() { cout<<"student的析构函数已经执行"<<endl; } void student::show() { person::show(); cout<<"学号:"<<no<<endl; } void main() { person p1; p1.show(); cout<<endl; person p2("zhao",30); p2.show(); cout<<endl<<endl; student s1; s1.show(); student s2("qian",18,5001); s2.show(); cout<<endl; } PS 我也是青大的学生 有了答案当然要分享了

c++ primer 第15章 句柄类 Sales_item 到底有什么用,要怎么调用这个类呢?

怎么可以在main函数里调用?只能在类定义内部使用private: Item_base *p; p是私有成员,并不代表不在发挥作用。

当多个指针同时指向一个对象,如果没有智能指针。

另外,不能直接被你看到

hosteons:10Gbps带宽,免费Windows授权,自定义上传ISO,VPS低至$21/年,可选洛杉矶达拉斯纽约

hosteons当前对美国洛杉矶、达拉斯、纽约数据中心的VPS进行特别的促销活动:(1)免费从1Gbps升级到10Gbps带宽,(2)Free Blesta License授权,(3)Windows server 2019授权,要求从2G内存起,而且是年付。 官方网站:https://www.hosteons.com 使用优惠码:zhujicepingEDDB10G,可以获得: 免费升级10...

CloudCone:KVM月付1.99美元起,洛杉矶机房,支持PayPal/支付宝

CloudCone的[2021 Flash Sale]活动仍在继续,针对独立服务器、VPS或者Hosted email,其中VPS主机基于KVM架构,最低每月1.99美元,支持7天退款到账户,可使用PayPal或者支付宝付款,先充值后下单的方式。这是一家成立于2017年的国外VPS主机商,提供独立服务器租用和VPS主机,其中VPS基于KVM架构,多个不同系列,也经常提供一些促销套餐,数据中心在洛杉...

JUSTG提供俄罗斯和南非CN2 GIA主机年$49.99美元JUSTGgia南非cn2南非CN2justG

JUSTG,这个主机商第二个接触到,之前是有介绍到有提供俄罗斯CN2 GIA VPS主机活动的,商家成立时间不久看信息是2020年,公司隶属于一家叫AFRICA CLOUD LIMITED的公司,提供的产品为基于KVM架构VPS主机,数据中心在非洲(南非)、俄罗斯(莫斯科),国内访问双向CN2,线路质量不错。有很多服务商实际上都是国人背景的,有的用英文、繁体搭建的冒充老外,这个服务商不清楚是不是真...

句柄类为你推荐
微信收款语音播报怎么设置微信收付款如何设置声音提示layout_gravityandroid 布局中 为什么能够通过android:layout_above 、android:layout_alignTop 、等 还要在之前加入inode智能客户端inode智能客户端无法正常启动,根本开都开不了vipjrvipjr英语怎么样?靠谱吗?flowplayer如何编译flowplayer源码smartuploadjspsmartupload如何使用?弹幕网站视频弹幕网站推荐pci数据捕获和信号处理控制器华硕pci数据捕获和信号处理控制器出现黄色叹号该下载什么驱动中科红旗中科红旗Linux 5.0桌面操作系统与Window系统是否有相近之处?水表读数水表的读数是什么意思?怎么读?
独立ip主机 godaddy域名注册 绍兴服务器租用 荣耀欧洲 云网数据 pccw mach 优惠码 彩虹ip ftp教程 域名和空间 广州服务器 优酷黄金会员账号共享 cloudlink 登陆空间 德讯 阿里云邮箱登陆 聚惠网 .htaccess 一句话木马 更多