阅读 Effective C++: 55 Specific Ways to Improve Your Programs and Designs, 3rd edition,中文译名《Effective C++:改善程序与设计的55个具体做法》(第三版)一书时,做的一些代码验证练习和笔记。
按章节划分:
Chapter 1: Accustoming Yourself to C++
Chapter 2: Constructors, Destructors, and Assignment Operators
- Item 5: Know what functions C++ silently writes and calls.
- Item 6: Explicitly disallow the use of compiler-generated functions you do not want.
- Item 7: Declare destructors virtual in polymorphic base classes.
- Item 8: Prevent exceptions from leaving destructors.
- Item 9: Never call virtual functions during construction or destruction.
- Item 10: Have assignment operators return a reference to
*this
. - Item 11: Handle assignment to self in
operator=
. - Item 12: Copy all parts of an object.
Chapter 3: Resource Management
资源(resource)是指使用完毕后要返还给系统的东西。比如内存、文件描述符、互斥锁、GUI的字体和笔刷、数据库连接以及网络套接字。
- Item 13: Use objects to manage resources.
- Item 14: Think carefully about copying behavior in resource-managing classes.
- Item 15: Provide access to raw resources in resource-managing classes.
- Item 16: Use the same form in corresponding uses of
new
anddelete
. - Item 17: Store
new
ed objects in smart pointers in standalone statements.
Chapter 4: Designs and Declarations
- Item 18: Make interfaces easy to use correctly and hard to use incorrectly.
- Item 19: Treat class design as type design.
- Item 20: Prefer pass-by-reference-to-
const
to pass-by-value. - Item 21: Don’t try to return a reference when you must return an object.
- Item 22: Declare data members
private
. - Item 23: Prefer non-member non-friend functions to member functions.
- Item 24: Declare non-member functions when type conversions should apply to all parameters.
- Item 25: Consider support for a non-throwing
swap
.
Chapter 5: Implementations
Chapter 6: Inheritance and Object-Oriented Design
- Item 32: Make sure public inheritance models “is-a.”
- Item 33: Avoid hiding inherited names.
- Item 34: Differentiate between inheritance of interface and inheritance of implementation.
- Item 35: Consider alternatives to virtual functions.
- Item 36: Never redefine an inherited non-virtual function.
- Item 37: Never redefine a function’s inherited default parameter value.
- Item 38: Model “has-a” or “is-implemented-in-terms-of” through composition.
- Item 39: Use private inheritance judiciously.
- Item 40: Use multiple inheritance judiciously.
Chapter 7: Templates and Generic Programming
- Item 41: Understand implicit interfaces and compile-time polymorphism.
- Item 42: Understand the two meanings of
typename
. - Item 43: Know how to access names in templatized base classes.
- Item 44: Factor parameter-independent code out of templates.
- Item 45: Use member function templates to accept “all compatible types.”
- Item 46: Define non-member functions inside templates when type conversions are desired.
- Item 47: Use traits classes for information about types.
- Item 48: Be aware of template metaprogramming.