随笔分类 - Effective C++
摘要:Boost 是一个社群,也是一个网站。致力于免费、源码开放、同僚复审的C++ 程序库开发。Boost 在C++ 标准化过程中扮演深具影响力的角色。 Boost 提供许多TR1 组件实现品,以及其他许多程序库。 http://boost.org
阅读全文
摘要:C++ 标准程序库的主要机能由STL、iostream、locales 组成。并包含C99 标准程序库。 TR1 添加了只能指针(例如 tr1::shared_ptr)、一般化函数指针(tr1::fuction)、hash-based 容器、正则表达式(regular expressions) 以及
阅读全文
摘要:严肃对待编译器发出的警告信息。努力在你的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉。 不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你元本年依赖的警告信息有可能消失。
阅读全文
摘要:当你写一个placement operator new ,请确定也写出了对应的placement operator delete。如果没有这样做,你的程序可能会发生隐微而时断时续的内存泄漏。 当你声明placement new 和 placement delete,请确定不要(非故意)地遮掩了它们的
阅读全文
摘要:operator new 应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new-handler。它也应该有能力处理0 bytes 申请。Class专属版本则还应该处理“比正确大小更大的(错误)申请”。 operator delete 应该在收到null指针时不做任何事。
阅读全文
摘要:有许多理由需要写个自定的new 和delete ,包括改善效能、对heap 运用错误进行调试、收集heap 使用信息。
阅读全文
摘要:set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用。 Nothorw new 是一个颇为局限的工具,因为它只适用于内存分配;后继的构造函数调用还是可能抛出异常。
阅读全文
摘要:Template metaprogramming(TMP,模板元编程)可将工作由运行期移往编译期,因而得以实现早期错误侦测和更高的执行效率。 TMP可被用来生成“基于政策选择组合”(based on combinations of policy choices)的客户定制代码,也可用来避免生成对某些
阅读全文
摘要:Traits classes使得“类型相关信息”在编译期可用。它们以template和“templates特化”完成实现。 整合重载技术(overloading)后,traits classes有可能在编译期对类型执行if...else测试。
阅读全文
摘要:当我们编写一个class template,而它所提供之“与此template相关的”函数支持“所有参数之隐式类型转换”时,请将那些函数定义为“class template内部的friend函数”。
阅读全文
摘要:可在derived class templates内通过“this->“指涉base class templates内的成员名称,或藉由一个明白写出的”base class资格修饰符”完成。
阅读全文
摘要:请使用member function templates(成员函数模板)生成”可接受所有兼容类型“的函数。 如果你声明member templates 用于“泛化copy构造”或“泛化assignment操作”,你还是需要声明正常的copy构造函数和copy assignment操作符。
阅读全文
摘要:Templates生成多个classes和多个函数,所以任何template代码都不该与某个造成膨胀的template参数产生相依关系。 因非类型模板参数(non-type template parameters)而造成的代码膨胀,往往可消除,做法是以函数参数或class成员变量替换template
阅读全文
摘要:声明template参数时,前缀关键字class和typename可互换。 请使用关键字typename标识嵌套从属类型名称;但不得在base class lists(基类列)或member initialization list(成员初值列)内以它作为base class修饰符。
阅读全文
摘要:classes和templates都支持接口(interface)和多态(polymorphism)。 对classes而言接口是显式的(explicit),以函数签名为中心。多态则是通过virtual函数发生于运行期。 对template参数而言,接口是隐式的(implicit),奠基于有效表达式
阅读全文
摘要:多重继承比单一继承复杂。它可能导致新的歧义性,以及对virtual继承的需要。 virtual继承会增加大小、速度、初始化(及赋值)复杂度等等成本。如果virtual base classes不带任何数据,将是最具实用价值的情况。 多重继承的确有正当用途。其中一个情节涉及“public继承某个Int
阅读全文
摘要:Private继承意味is-implemented-in-terms of(根据某物实现出)。它通常比复合(composition)的级别低。但是当derived class需要访问protected base class的成员,或需要重新定义继承而来的virtual函数时,这么设计是合理的。 和复
阅读全文
摘要:复合(composition)的意义和public继承完全不同。 在应用域(application domain),复合意味has-a(有一个)。在实现域(implementation domain),复合意味is-implemented-in-terms-of(根据某物实现出)。
阅读全文
摘要:绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数 你唯一应该覆写的东西 却是动态绑定。
阅读全文
摘要:绝对不要重新定义继承而来的non-virtual函数。
阅读全文

浙公网安备 33010602011771号