首页 > 代码库 > 学习日记之大话设计模式和Effective C++大结局

学习日记之大话设计模式和Effective C++大结局

第一次潜心学习一个月时间,看完了《大话设计模式》和《Effective C++》两本书,两本书的前半部分都比较容易,但是后期的部分,比如:C++的内存,异常和模板的知识就很难理解了。也许和自己很少用异常处理和模板的关系吧。自己坚持了一个月,无论如何,这两本书给我带来了很多新的知识,发现了自己的不足。接下来打算继续看《C++ Templates》这本书,希望能弥补自己在模板编程方便的不足和为以后研究STL和Boost打下坚实的基础。废话少说,言归正传。下面说一下两本书的最后一点知识点。


访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

(1),访问者模式适用于数据结构相对稳定的系统。

(2),访问者模式把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演化。

(3),访问者模式的目的是要把处理从数据结构分离开来。

(4),访问者模式的有点在于增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。

(5),访问者模式的缺点在于增加新的数据结构变得困难。


Effective C++:

1:编写 new 和 delete 时需固守常规

(1),operator new 应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用 new-handler。它也应该有能力处理 0 bytes 的申请。class 专属版本则还应该处理“比正确大小更大的申请”。

(2),operator delete 应该在收到 null 指针时不做任何事。 Class 专属版本则应该处理“比正确大小更大的错误申请”。

2:写了 placement new 也要写 placement delete

(1),当你写一个 placement operator new ,请确定也写出了对应的 placement operator delete 。如果没有这样做,你的程序可能会发生隐危而时断时续的内存泄露。

(2),当你声明 placement new 和 placement delete ,请确定不要无意识地遮掩了他们呢的正常版本。

3:不要轻易忽略编译器的警告

(1),严肃对待编译器发出的警告信息。努力在你的编译器的最高警告级别下争取“无任何警告”。

(2),不要过度依赖编译器的报警能力,因为不同编译器对待事情的态度并不相同,一旦移植到另一个编译器上,你原来依赖的警告信息有可能消失。

4:让自己熟悉包括 TR1 在内的标准程序库

(1),C++ 程序库的主要机能由 STL、 iostreams、 locales组成。并包含 C99标准程序库。

(2),TR1 添加了智能指针、一般化函数指针、 hash-based 容器、正则表达式以及另外是个组件的支持。

(3),TR1 自身只是一份规范。为获得TR1提供的好处,你需要一份实物。一个好的实物来自 Boost。

5:让自己熟悉 Boost

(1),Boost 是一个社群,也是一个网站。致力于免费、源码开放、同僚复审的C++ 程序库开发。Boost 在 C++ 标准化过程中扮演深具影响力的角色。

(2),Boost 提供许多TR1 组件实现品,以及许多其它程序库。


今日发现:

NCFramelessHelper利用qt内部事件实现了顶层无边框窗体的拖拽,移动等功能。

问题:vlc 和 directx在播放视频时,会受到顶层窗体 WA_translucentPaintEvent属性影响,无法显示视频。暂时没找的合适解决方案。