Effective C++

List of pages tagged with effective-cplus:

2. Shifting From C to C++.
Prefer const and inline to #define.
Prefer iostream to stdio.h.
Prefer new and delete to malloc and free.
Prefer C++-style comments.


3. Memory Management.
1項defineではなく、constとinlineを使おう1. ★☆☆☆☆
Use delete on pointer members in destructors. ★☆☆☆☆
7項メモリ不足に備えよう2 ★☆☆☆☆
8Adhere to convention when writing operator new and operator delete. ★☆☆☆☆
9Avoid hiding the "normal" form of new. ★☆☆☆☆
10項 operator newを書くなら、operator deleteも書こう。3 ★☆☆☆☆


3. Constructors, Destructors, and Assignment Operators.
項目 理解度
11項 メモリを動的に割り当てるクラスでは、コピーコンストラクタと代入演算子を宣言しよう4 ★★☆☆☆
12項 コンストラクタでは代入よりも初期化を使おう。5 ★★★☆☆
List members in an initialization list in the order in which they are declared. ★☆☆☆☆
Make destructors virtual in base classes. ★☆☆☆☆
15項 operator=を書くときは*thisのリファレンスを返そう6 ★☆☆☆☆
Assign to all data members in operator. ★☆☆☆☆
Check for assignment to self in operator. ★☆☆☆☆


Classes and Functions: Design and Declaration.
項目 理解度
18項クラスインターフェイスが完全かつ最小限になるまでがんばろう7 ★☆☆☆☆
19項メンバ関数、非メンバ関数、friend関数を使い分けよう8 ★★☆☆☆
20項データメンバをpublicインタフェースに入れるのはやめよう9 ★★★☆☆
21項 使わる時は、必ずconstを使おう10 ★★★☆☆
22項 値渡しよりも、リファレンス渡しを使おう11 ★★☆☆☆
23項 オブジェクトを返さなければならないときに、リファレンスを返そうとがんばるのはやめよう1213 ★☆☆☆☆
24項 関数のオーバーロードとデフォルト付きパラメータは、慎重に使い分けよう14 ★☆☆☆☆
Avoid overloading on a pointer and a numerical type. ★☆☆☆☆
Guard against potential ambiguity. ★☆☆☆☆
Explicitly disallow use of implicitly generated member functions you don't want. ★☆☆☆☆
Partition the global namespace. ★☆☆☆☆

5 クラスと関数:その実装

Classes and Functions: Implementation. ★☆☆☆☆
Avoid returning "handles" to internal data. ★☆☆☆☆
Avoid member functions that return non-const pointers or references to members less accessible than themselves. ★☆☆☆☆
31項:関数はローカルオブジェクトへのリファレンスや関数の中でnewで初期化したポインタの参照先を返してはならない15 ★☆☆☆☆
Postpone variable definitions as long as possible. ★☆☆☆☆
Use inlining judiciously. ★☆☆☆☆
Minimize compilation dependencies between files. ★☆☆☆☆

6. 継承とオブジェクト指向設計

Inheritance and Object-Oriented Design.
33項public継承するときは、「その一種である」(is-a)関係のモデルかどうか確認しよう16 ★★☆☆☆
36項インターフェイスの継承と実装の継承とを区別しよう17 ★★★☆☆
37項継承した非仮想関数を再定義してはならない18 ★★★★☆
38項 継承したデフォルトパラメータ値を再定義してはならない19 ★★★★☆
Avoid casts down the inheritance hierarchy. ★☆☆☆☆
40項 「それを持っている」関係や「それを実装手段とする」関係は、層を重ねる形でモデル化しよう20 ★☆☆☆☆
Differentiate between inheritance and templates. ★☆☆☆☆
42項 privateな継承はよく考えてから使おう21 ★☆☆☆☆
Use multiple inheritance judiciously. ★☆☆☆☆
Say what you mean; understand what you're saying. ★☆☆☆☆

8. その他

Know what functions C++ silently writes and calls. ★☆☆☆☆
Prefer compile-time and link-time errors to runtime errors. ★☆☆☆☆
Ensure that non-local static objects are initialized before they're used. ★☆☆☆☆
Pay attention to compiler warnings. ★☆☆☆☆
49項標準ライブラリに精通しよう22 ★☆☆☆☆
Improve your understanding of C++. ★☆☆☆☆



  • 特に親の親のメンバはどこにいったかわからなくなる。
  • listにすると、イテレータしか使えないから、ファイル読み込みなどの時にポインタを渡したいときに困る。特に構造体を内包している場合。
  • オブジェクトの中に別のオブジェクトを持つ(has-a)だと、どうしてもポインタにしたくなるけど、それっていいのかな?
  • public継承しても親のprivateメンバ変数を使えないのはなぜか?
  • メンバをprivateにすると、沢山のゲッター関数で対処して馬鹿みたいに思える
  • constな配列作りたい時、containerはできないんじゃない?

books effective

サポートサイト Wikidot.com bookseffective