关于cstring总结

关于cstring总结

ID:35298169

大小:110.00 KB

页数:12页

时间:2019-03-23

关于cstring总结_第1页
关于cstring总结_第2页
关于cstring总结_第3页
关于cstring总结_第4页
关于cstring总结_第5页
资源描述:

《关于cstring总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、关于CString总结 作者:wangshengxiang 前言:串操作是编程中最常用也最基本的操作之一。做为VC程序员,无论是菜鸟或高手都曾用过Cstring。而且好像实际编程中很难离得开它(虽然它不是标准C++中的库)。因为MFC中提供的这个类对我们操作字串实在太方便了,CString不仅提供各种丰富的操作函数、操作符重载,使我们使用起串起来更象basic中那样直观;而且它还提供了动态内存分配,使我们减少了多少字符串数组越界的隐患。但是,我们在使用过程中也体会到CString简直太容易出错了,而且有的不可捉摸。所以

2、有许多高人站过来,建议抛弃它。在此,我个人认为:CString封装得确实很完美,它有许多优点,如“容易使用,功能强,动态分配内存,大量进行拷贝时它很能节省内存资源并且执行效率高,与标准C完全兼容,同时支持多字节与宽字节,由于有异常机制所以使用它安全方便”其实,使用过程中之所以容易出错,那是因为我们对它了解得还不够,特别是它的实现机制。因为我们中的大多数人,在工作中并不那么爱深入地去看关于它的文档,何况它还是英文的。由于前几天我在工作中遇到了一个本不是问题但却特别棘手、特别难解决而且莫名惊诧的问题。好来最后发现是由于CS

3、tring引发的。所以没办法,我把整个CString的实现全部看了一遍,才慌然大悟,并彻底弄清了问题的原因(这个问题,我已在csdn上开贴)。在此,我想把我的一些关于CString的知识总结一番,以供他(她)人借鉴,也许其中有我理解上的错误,望发现者能通知我,不胜感谢。 1.CString实现的机制.  CString是通过“引用”来管理串的,“引用”这个词我相信大家并不陌生,象Window内核对象、COM对象等都是通过引用来实现的。而CString也是通过这样的机制来管理分配的内存块。实际上CString对象只有一个

4、指针成员变量,所以任何CString实例的长度只有4字节.      即:intlen=sizeof(CString);//len等于4这个指针指向一个相关的引用内存块,如图:CStringstr("abcd");     ‘A’‘B’‘C’‘D’0                                                                                                       0x04040404                        

5、  head部,为引用内存块相关信息                                                                          str                              0x40404040                                                                                                                               

6、                                          正因为如此,一个这样的内存块可被多个CString所引用,例如下列代码:CStringstr("abcd");CStringa=str;CStringb(str);CStringc;c=b;上面代码的结果是:上面四个对象(str,a,b,c)中的成员变量指针有相同的值,都为0x40404040.而这块内存块怎么知道有多少个CString引用它呢?同样,它也会记录一些信息。如被引用数,串长度,分配内存长度。这块引用内存块的结构定义如下:s

7、tructCStringData{ longnRefs;      //表示有多少个CString引用它.4 intnDataLength; //串实际长度.4 intnAllocLength;//总共分配的内存长度(不计这头部的12字节).4};由于有了这些信息,CString就能正确地分配、管理、释放引用内存块。如果你想在调试程序的时候获得这些信息。可以在Watch窗口键入下列表达式:(CStringData)((CStringData)(this->m_pchData)-1)或(CStringData)((CSt

8、ringData)(str.m_pchData)-1)//str为指CString实例 正因为采用了这样的好机制,使得CString在大量拷贝时,不仅效率高,而且分配内存少。  2.LPCTSTR与GetBuffer(intnMinBufLength)这两个函数提供了与标准C的兼容转换。在实际中使用频率很高,但却是最容易出错的地方

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。