完全解析<atlalloc.h>
摘要:内存管理是C++中永恒的话题, 磨刀不误砍柴功,先把内存管理这块给搞个透彻,有助于对ATL的整体理解和把握。打开<atlalloc.h>,发现它只包含了两上头文件<windows.h>、<ol2.h>,显然<atlalloc.h>是ATL中少有的一个不依赖于任何ATL、MFC头文件的库文件。因为<atlalloc.h>不依赖于任何其它同类库文件,所以对<atlalloc.h>的分析相比CString就容易了很多,不需要分析复杂的文件间关系。那么,我们从文件的第一行开始,一点一点地分析<atlalloc.h>到底
阅读全文
windows c++ 问题
摘要:【LocalAlloc 和 GlobalAlloc】 16位windows用一个全局堆和局部堆来管理内存,每一个应用程序或dll装入内存时,代码段被装入全局堆,而系统又为每个实例从全局堆中分配了一个64kb的数据段作为该实例的局部堆,用来存放应用程序的堆栈和所有全局或静态变量。而LocalAlloc
阅读全文
ATL、MFC、WTL CString 的今生前世
摘要:上文分析了ATL、MFC CString的设计和实现,我们不禁会疑问,为什么ATL和MFC的CString头文件要搅在一起?上文的分析有些杂乱,我们通过一张图来更加清晰的观察,如下: 上图中,用圈圈住的头文件表示ATL头文件,没被圈的代表MFC头文件。另外,在头文件旁边字符,表示各个头文件中实现的类。 现在让我们仔细观看,整个貌似平衡的设计中,其实有着很多的不平衡。我想问: 1、为什么MFC头文件cstringt.h要包含atl头文件atlsimpstr.h?为什么ATL头文件要包含cstringt.h?ATL搞ATL的,MFC搞MFC的,各不相干,起不更好? 2、ChTraitOS 放在 a
阅读全文
剖析ATL、WTL CString的实现
摘要:话说CString这个东西困扰了很多年轻人,因为它会引起诡异的编译错误,今天跟着我一起来深入ATL、WTL头文件,来把这个东西搞个清清楚楚。【涉及到头文件】 ATL: atlstr.h, atlsimpstr.h MFC : cstringt.h、afxstr.h WTL : atlmisc.h ATL和MFC有关剪不断理还乱的关系,为了更容易分析,我们先要理清这四个头文件间的关系。观察相互间观察顺序,可以得出: atlstr.h引用cstringt.h,cstring引用atlsimpstr.h,afxstr.h引用cstringt.h,由此可得出下图:【atlsimpstr.h 都干了什么
阅读全文
C++中的INL
摘要:inl 文件是内联函数的源文件。内联函数通常在c++头文件中实现,但有的时候内联函数较多或者出于一些别的考虑(使头文件看起来更简洁等),往往会将这部分具体定义的代码添加到INL文件中,然后在该头文件的末尾将其用#include引入。由此也可以看到inl文件的例外一个用法的影子——模板函数、模板类的定义代码的存放。对于比较大的工程来说,出于管理方面的考虑,模板函数、模板类的声明部分一般存放在一个或少数几个文件中,而将其定义部分存放在inl文件中,然后在相应的头文件中包含进来。 Google代码规范中也谈到了inl文件,需要阅读的读者可以从这里阅读Google代码规范,http://google.
阅读全文
剖析 ATL - CStringData
摘要:要想理解好某个库的整个系统,我们需要准确地知道我们当前所阅读的代码位于哪一个库目录中。譬如WTL和ATL的头文件常常容易让初学者混淆。这里我们要分析两个类,CAtlStringMgr(存在于atlstr.h中)和 CStringData(存在于atlsimpstr.h中)。首先给出类关系图:(因画图水平有限,下图中CAtlStringMgr到IAtlStringMgr的继承线应该改为实现线)1、使用到的设计模式 这里我看到一个,是策略模式。细看ATL中,有若干实现IAtlMemMgr接口的类,分别为各个实现类。CAtlStringMgr通过IAtlMemMGr指针来引用,因而可以随意使用各个内
阅读全文
如何剖析一个类
摘要:阅读组内代码也好、开源代码也好,在OOP程序设计中,对代码中各个类的理解至关重要。经过大量的阅读与分析后,发一些小技巧可以加快与加强自己对代码的理解,现整理如下: 如何剖析一个类: 1、先看本类继承了哪些基类和实现了哪些接口。 类的第一行往往包含的是继续基类的信息以及实现接口的信息,所以在一开始就要
阅读全文