理解ATL

来源:互联网 发布:国产车能买吗 知乎 编辑:程序博客网 时间:2024/06/05 16:05

 1  ATL is just composed almost entirely of independent base classes that are "templatized", It has been said that the best thing about the ATL framework is that it isn't a framework at all . Indeed, if an ATL poster is ever published, the class layout will be very, very flat.  the MFC is a framework, but ATL is not. because it's a dll, so it just has some functions to be called, example dllregister()....


2  MFC is linked to a project as a static library or a dll, but ATLis compiled as source code. Because there are no OBJ files to link to , ATL requires no run-time DLL redistribution.

 

3 MFC是一套类库,同时也是一套框架。
  说是类库, 因为它有许多类, 而且各个类之间相互关联, 相互继承。
  说是框架, 因为它各个类之间紧密配合,形成一套流水线,从程序的产生到灭亡, 都是一个固定的过程。
  假如一个MFC EXE, 程序的启动过程都是使用的MFC类。

  ATL是一套类库,但不是一套框架。
  说是类库, 它有许多类,类与类之间没有任何关系, 都是独立的。
  不是框架。
  假如一个ATL DLL, 框架就是几个DLL标准函数, dllmain(), dllRegister()等等就是它的框架。而这些东西与 ATL没有关系。


4 总结起来,ATL比MFC简单, 它只是一套互相没有关系的类。 当你需要某个功能时,使用这个类就可以了。

 

5 智能指针, 其实是一个类, 一个包装类, 即生成一个类, 把你将要使用的指针包装起来, 包装的目的是为了克服dumb指针的一些缺点,比如忘记初始化, 计算引用计数等等。dumb指针作为智能指针的一个成员, 这样, 在类的构造函数中可以将它初始化。 这样使用智能指针的人如果忘记初始化也不会有问题。 生成一个成员变量用来计数。
智能指针中需要重载操作符operator->, 在其中返回它的dumb pointer。 这样智能指针的用户才能像使用dumb pointer一样来调用功能。否则整个包装都是失败的,因为客户使用了你的智能指针后却不能调对象的成员函数了。

 

6 proxy/stub. 在两个EXE之间需要它们。在同一个dll不同apartment也需要它们。
  详情请见inside ATL 第四章  The Proxy/Stub Makefile部分。

原创粉丝点击