深入解析CString的内存结构

深入解析CString的内存结构

ID:39619994

大小:40.00 KB

页数:5页

时间:2019-07-07

深入解析CString的内存结构_第1页
深入解析CString的内存结构_第2页
深入解析CString的内存结构_第3页
深入解析CString的内存结构_第4页
深入解析CString的内存结构_第5页
资源描述:

《深入解析CString的内存结构》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、深入解析MFC--CString的内存结构VC6的时候记得看过CString的源代码,并不复杂,应该是从VC7开始,MFC和ATL共用一个CString了,新的CString使用了模板技术和其它技术,值得一提。        先 看CString的定义:typedefCAtlStringCString;如果想明确使用ANSI和UNICODE版本,可以使用CStringA和CStringW,看它们的定义:typedefCAtlStringWCStringW;typedefCAtlStringACSt

2、ringA;以上三个Atl版本的String,其定义为:typedefCStringT>CAtlStringW;typedefCStringT>CAtlStringA;typedefCStringT>CAtlString;因此,CStringT才是真实的CString类。template

3、raits>classCStringT:   publicCSimpleStringT::c_bIsMFCDLLTraits>{};CStringT有两个模板参数,第一个表明字符类型,第二个参数从源代码中知道是StrTraitATL:template

4、eType>>classStrTraitATL:publicStringIterator{public:   staticHINSTANCEFindStringResourceInstance(__inUINTnID)throw()   {       return(AtlFindStringResourceInstance(nID));   }   staticIAtlStringMgr*GetDefaultManager()throw()   {       return(&g_strmgr)

5、;   }};从类声明看到他提供了一个字符串管理器,字符迭代器和从资源中获得字符串的功能。字符串管理器比较重要,后面会提到。CStringT没有成员变量,封装了很多好用的字符串函数,数据在基类CSimpleStringT中。CSimpleStringT只有一个成员变量m_pszData,不要小看这个变量,在它身上,有着很多秘密,绝对不是他的声明那么朴实:PXSTRm_pszData;PXSTR就是char或者wchar_t,只不过被模板的特化技术封装了一下。CSimpleStringT没有直接操作

6、m_pszData,而是通过成员函数GetData来获得,看一下这个函数:CStringData*GetData()constthrow(){   return(reinterpret_cast(m_pszData)-1);}这个函数将m_pszData指向的内存转成CStringData类型,然后往前移动sizeof(CStringData)的长度,指向了一个CStringData对象。m_pszData的秘密就在此处,实际上,每次分配内存时,都会多分配一段sizeo

7、f(CStringData)长度的内存,最前面这段数据格式化为CStringData对象,然后m_pszData指向其后的数据,这才是字符串。

8、_______________

9、___________________________________________________

10、CStringData    m_pszData再看CStringData的声明:structCStringData{   IAtlStringMgr*pStringMgr; //StringmanagerforthisC

11、StringData   intnDataLength; //LengthofcurrentlyuseddatainXCHARs(notincludingterminatingnull)   intnAllocLength; //LengthofallocateddatainXCHARs(notincludingterminatingnull)   longnRefs;    //Referencecount:negative==locked   //XCHARdata[nAllo

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

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

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