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

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

另外,不能直接被你看到

ftlcloud(超云)9元/月,1G内存/1核/20g硬盘/10M带宽不限/10G防御,美国云服务器

ftlcloud怎么样?ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。点击进入:ftlcloud官方网站...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

Boomer.Host(年付3.5美)休斯敦便宜VPS

Boomer.Host是一家比较新的国外主机商,虽然LEB自述 we’re now more than 2 year old,商家提供虚拟主机和VPS,其中VPS主机基于OpenVZ架构,数据中心为美国得克萨斯州休斯敦。目前,商家在LET发了两款特别促销套餐,年付最低3.5美元起,特别提醒:低价低配,且必须年付,请务必自行斟酌确定需求再入手。下面列出几款促销套餐的配置信息。CPU:1core内存:...

句柄类为你推荐
rbf神经网络rbf神经网络的输入参数个数有上限么showwindowVB6.0中ShowWindow函数的使用arc是什么意思arctanx等于什么?jdk6Java 中的 JDK 6 Update 6 到哪下载啊 ? 有一点急waves插件请问下waves9是什么东西,插件吗?色库赤峰中色库博红烨锌业有限公司就是冶炼厂在 赤峰的 什么地方,一 人知道吗???ruby语言公司实习让我学习RUBY语言,不知道RUBY语言发展前景怎么样,值不值的去学习。清除电脑垃圾怎样清除电脑垃圾cf加速器玩cf ping高用什么加速器比较好jsindexofjavascript 中indexof 的用法
海外服务器租用 域名注册服务 域名管理 主机 免备案空间 wdcp 网络星期一 国内加速器 网站挂马检测工具 双线主机 idc是什么 稳定免费空间 息壤代理 支付宝扫码领红包 申请网站 云营销系统 免费蓝钻 登陆qq空间 双11促销 2016黑色星期五 更多