句柄类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是私有成员,并不代表不在发挥作用。

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

另外,不能直接被你看到

HTTPS加密协议端口默认是多少且是否支持更换端口访问

看到群里网友们在讨论由于不清楚的原因,有同学的网站无法访问。他的网站是没有用HTTPS的,直接访问他的HTTP是无法访问的,通过PING测试可以看到解析地址已经比较乱,应该是所谓的DNS污染。其中有网友提到采用HTTPS加密证书试试。因为HTTP和HTTPS走的不是一个端口,之前有网友这样测试过是可以缓解这样的问题。这样通过将网站绑定设置HTTPS之后,是可以打开的,看来网站的80端口出现问题,而...

腾讯云爆款秒杀:1C2G5M服务器38元/年,CDN流量包6元起

农历春节将至,腾讯云开启了热门爆款云产品首单特惠秒杀活动,上海/北京/广州1核2G云服务器首年仅38元起,上架了新的首单优惠活动,每天三场秒杀,长期有效,其中轻量应用服务器2G内存5M带宽仅需年费38元起,其他产品比如CDN流量包、短信包、MySQL、直播流量包、标准存储等等产品也参与活动,腾讯云官网已注册且完成实名认证的国内站用户均可参与。活动页面:https://cloud.tencent.c...

美国G口/香港CTG/美国T级超防云/物理机/CDN大促销 1核 1G 24元/月

[六一云迎国庆]转盘活动实物礼品美国G口/香港CTG/美国T级超防云/物理机/CDN大促销六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,...

句柄类为你推荐
流程管理平台我想要一款好用的业务流程管理软件,请大家推荐下元数据管理什么是元数据?(指数据中心建设而言)举个例子说明一下。洗牌算法关于洗牌算法,请用JAVA编写,定义一个数组,储存1-52以内的数,打乱顺序输出!foxmail邮箱注册Foxmail怎么注册喏?rdlcordless phone是什么意思备忘录模式手机如何设置备忘录提醒ruby语言ruby什么意思?什么含义?数据分析报告范文800字统计分析报告数据分析报告范文数据分析报告怎么写数据分析报告范文如何写数据分析报告?
3322动态域名注册 美国vps推荐 淘宝二级域名 科迈动态域名 vir 腾讯云盘 payoneer permitrootlogin 国内php空间 服务器是干什么的 gtt vip域名 360云服务 linode支付宝 美国盐湖城 新加坡空间 全能空间 贵阳电信 asp空间 万网服务器 更多