- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于CString总结
?
作者:wangshengxiang
?
前言:串操作是编程中最常用也最基本的操作之一。 做为VC程序员,无论是菜鸟或高手都曾用过Cstring。而且好像实际编程中很难离得开它(虽然它不是标准C++中的库)。因为MFC中提供的这个类对我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用过程中也体会到CString简直太容易出错了,而且有的不可捉摸。所以有许多高人站过来,建议抛弃它。
在此,我个人认为:CString封装得确实很完美,它有许多优点,如“容易使用 ,功能强,动态分配内存,大量进行拷贝时它很能节省内存资源并且执行效率高,与标准C完全兼容,同时支持多字节与宽字节,由于有异常机制所以使用它安全方便” 其实,使用过程中之所以容易出错,那是因为我们对它了解得还不够,特别是它的实现机制。因为我们中的大多数人,在工作中并不那么爱深入地去看关于它的文档,何况它还是英文的。
由于前几天我在工作中遇到了一个本不是问题但却特别棘手、特别难解决而且莫名惊诧的问题。好来最后发现是由于CString引发的。所以没办法,我把整个CString的实现全部看了一遍,才慌然大悟,并彻底弄清了问题的原因(这个问题,我已在csdn上开贴)。在此,我想把我的一些关于CString的知识总结一番,以供他(她)人借鉴,也许其中有我理解上的错误,望发现者能通知我,不胜感谢。
?
1. CString实现的机制.
?? CString是通过“引用”来管理串的,“引用”这个词我相信大家并不陌生,象Window内核对象、COM对象等都是通过引用来实现的。而CString也是通过这样的机制来管理分配的内存块。实际上CString对象只有一个指针成员变量,所以任何CString实例的长度只有4字节.
?????? 即: int len = sizeof(CString);//len等于4
这个指针指向一个相关的引用内存块,如图: CString str(abcd);
?
?
?
?
?
‘A’
‘B’
‘C’
‘D’
0 ???????????????????????????????????????????
??? ??????????????????????????
??? ????????????????????????
??? ?0??????????????????????????head部,为引用内存块相关信息
??? ???????????????????????????????????????????????????????????????
???????? str?????????????????????????????? 0???? ??????????????????????????????????????
??????????????????????????????????????????
??????????????????????????????????????????
??????????????????????????????????????????
?
正因为如此,一个这样的内存块可被多个CString所引用,例如下列代码:
CString str(abcd);
CString a = str;
CString b(str);
CString c;
c = b;
上面代码的结果是:上面四个对象(str,a,b,c)中的成员变量指针有相同的值,都为0而这块内存块怎么知道有多少个CString引用它呢?同样,它也会记录一些信息。如被引用数,串长度,分配内存长度。
这块引用内存块的结构定义如下:
struct CStringData
{
? long nRefs;?????? //表示有多少个CString 引用它. 4
? int nDataLength;? //串实际长度. 4
? int nAllocLength; //总共分配的内存长度(不计这头部的12字节). 4
};
由于有了这些信息,CString就能正确地分配、管理、释放引用内存块。
如果你想在调试程序的时候获得这些信息。可以在Watch窗口键入下列表达式:
(CStringData*)((CStringData*)(this-m_pchData)-1)或
(CStringData*)((CStringData*)(str.m_pchData)-1)//str为指CString实例
?
正因为采用了这样的好机制,使得CString在
您可能关注的文档
- 正则表达式 (1).docx
- 2、三位数除以整十数(商是两位数).doc
- matlab函数大全(非常实用).doc
- 考试范围(含答案) (1).doc
- 课题二 简单物料进仓 出仓信息管理.doc
- 拳皇97键盘设定如下.doc
- 意见下草根系平台出路探讨 鸣金网.docx
- Matlab转C注意点.doc
- 程序设计课程——集合.doc
- 定制式义齿评审规范[1].doc
- 新 彩色食品到底能不能吃建 Microsoft Word 文档 (6).doc
- eNSP实验:BGP.docx
- 《电子商务概论》综合练习__1(201104).docx
- 2005-2006学年第二学期SQL期末试卷B.doc
- 2014年福建特岗教师招聘考试《小学英语》完形填空题强化练习(三).doc
- American History Foreign Events Begin to Shape Presidency 阅读.doc
- 保险学试卷B(2004).doc
- 复习1(带答案).doc
- 宁海县梅林小学2012学年第二学期1—6年级期中考试安排.doc
- 16次四级作文题目(1).doc
最近下载
- 人教版三年级上册数学全册教学设计(配2025年秋新版教材).docx
- 西南交通大学机械原理课后习题答案.pdf VIP
- 大模型面试题-15-大模型 RAG 经验面.pdf VIP
- 环境统计第二章.ppt VIP
- 2021年新教材人教A版高中数学必修第一册第五章三角函数 教学课件.pptx VIP
- (完整版)幼儿园卫生保健培训.pptx VIP
- 苏教版数学四年级上册第八单元《垂线与平行线》课件.pptx VIP
- 110kV变电站电气设备安装及调试施工方案.pdf VIP
- 西南交通大学机械原理课后习题答案.pdf VIP
- 江西省南昌市一中2024-2025学年高一下学期第一次月考语文试题(含解析).docx VIP
文档评论(0)