Effective C++ 原著第3版
八重洲ブ本店。
Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
- 作者: スコット・メイヤーズ,小林健一郎
- 出版社/メーカー: ピアソン・エデュケーション
- 発売日: 2006/04/29
- メディア: 大型本
- 購入: 29人 クリック: 411回
- この商品を含むブログ (186件) を見る
巻末付録に第2版と第3版の対応表があるのだが、項番号だけしか記されてなくわかりにくいので、タイトル込みの表にしとく。
とりあえず追加された項(1,8,9,15,17,25,29,35,42,43,45,46,47,48,55)だけ先に読んでおこう。第2版にあったものも内容は書き直されているとのことなので(あんど、以前第2版を読んだときはちんぷんかんぷんのものが多かったので…)、あとでちゃんと読もう。
3版 | 2版 | ||
---|---|---|---|
項 | タイトル | 項 | タイトル |
1 | C++を複数の言語の連合と見なそう | ||
2 | #defi neより、const、enum、inlineを使おう | 1 | #define ではなく、const と inline を使おう |
3 | 可能ならいつでもconstを使おう | 21 | 使えるときは、必ず const を使おう |
4 | オブジェクトは、使う前に初期化しよう | 12 | コンストラクタでは、代入よりも初期化を使おう |
13 | 初期化リストのメンバは、宣言した順に並べよう | ||
47 | 非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにしよう | ||
5 | C++が自動で書き、自動で呼び出す関数を知ろう | 45 | C++がどんな関数を黙って書き、呼び出しているか知っておこう |
6 | コンパイラが自動生成することを望まない関数は、使用を禁止しよう | 27 | 暗黙のうちに生成される不要なメンバ関数は、明示的に使用を禁止しよう |
7 | ポリモーフィズムのための基底クラスには仮想デストラクタを宣言しよう | 14 | 基底クラスには、仮想デストラクタを持たせよう |
8 | デストラクタから例外を投げないようにしよう | ||
9 | コンストラクタやデストラクタ内では決して仮想関数を呼び出さないようにしよう | ||
10 | 代入演算子は*thisへの参照を戻すようにしよう | 15 | operator = を書くときは、*this へのリファレンスを返そう |
11 | operator=の実装では、自己代入に備えよう | 17 | operator = では、自分自身へ代入するケースをチェックしよう |
12 | コピーするときは、オブジェクトの全体をコピーしよう | 16 | operator = では、すべてのデータメンバに代入しよう |
13 | リソース管理にオブジェクトを使おう | 6 | デストラクタでポインタメンバにdelete を使うのを忘れないようにしよう |
14 | リソース管理クラスのコピーの振る舞いはよく考えて決めよう | 11 | メモリを動的に割り当てるクラスでは、コピーコンストラクタと代入演算子を宣言しよう |
15 | リソース管理クラスには、リソースそのものへのアクセス方法を付けよう | ||
16 | 対応するnewとdeleteは同じ形のものを使おう | 5 | new と delete のペアは同じ形式に揃えよう |
17 | newで生成したオブジェクトをスマートポインタに渡すのは、独立したステートメ ントで行うようにしよう | ||
18 | インタフェースは、正しく使うときには使いやすく、間違った使い方では使いにくいものにしよう | 46 | ランタイムエラーよりは、コンパイル時やリンク時エラーのほうがいい |
19 | クラスのデザインを型のデザインとして考えよう | (頁77-79) | |
20 | 値渡しよりconst参照渡しを使おう | 22 | 値渡しよりも、リファレンス渡しを使おう |
21 | オブジェクトを戻すべき時に参照を戻そうとしないこと | 23 | オブジェクトを返さなければならないときに、リファレンスを変えそうとがんばるのはやめよう |
31 | 関数は、ローカルオブジェクトへのリファレンスや関数の中でnew で初期化したポインタの参照先を返してはいけない | ||
22 | データメンバはprivate宣言しよう | 20 | データメンバをpublic インターフェースに入れるのはやめよう |
23 | メンバ関数より、メンバでもfriendでもない関数を使おう | 18 | クラスインターフェースが完全かつ最小限になるまでがんばろう |
24 | すべての引数に型変換が必要なら、メンバでない関数を宣言しよう | 19 | メンバ関数、非メンバ関数、friend関数を使い分けよう |
25 | 例外を投げないswapを考えよう | ||
26 | 変数の定義は可能な限り先延ばししよう | 32 | 変数の定義は、できるだけ後回しにしよう |
27 | キャストは最小限にしよう | 39 | 継承の階層構造を下る方向のキャスト(ダウンキャスト)は避けよう |
28 | オブジェクト内部のデータへの「ハンドル」を戻さないようにしよう | 29 | 内部データのハンドルを返すのはやめよう |
30 | メンバ関数は、自分よりもアクセス制限がきついメンバへの非const ポインタや参照を返さないようにしよう | ||
29 | コードを例外安全なものにしよう | ||
30 | インラインをよく理解しよう | 33 | 関数はよく考えてからインライン化しよう |
31 | ファイル間のコンパイル依存性をなるべく小さくしよう | 34 | コンパイルするファイル間の依存性はできるだけ減らそう |
32 | public継承はis-a関係を表すようにしよう | 35 | public に継承するときは、その一種である関係のモデルかどうか確認しよう |
33 | 継承した名前を隠蔽しないようにしよう | 9 | 普通の形式の new を隠蔽しないように注意しよう |
34 | インタフェースの継承と実装の継承の区別をしよう | 36 | インターフェースの継承と実装の継承とを区別しよう |
35 | 仮想関数の代わりになるものを考えよう | ||
36 | 非仮想関数を派生クラスで再定義しないこと | 37 | 継承した非仮想関数を再定義してはならない |
37 | 継承された関数のデフォルト引数値を再定義しない | 38 | 継承したデフォルトパラーメータ値を再定義してはならない |
38 | コンポジションを使ってhas-a関係、is-implementedin-terms-of関係を作ろう | 40 | それを持っている関係や、それを実装手段とする関係は、層を重ねる形でモデル化しよう |
39 | private継承は賢く使おう | 42 | private な継承はよく考えてから使おう |
40 | 多重継承は賢く使おう | 43 | 多重継承は慎重に使おう |
41 | 暗黙のインタフェースとコンパイル時ポリモーフィズムを理解しよう | 41 | 継承とテンプレートの違いを理解しよう |
42 | typenameの2 つの意味を理解しよう | ||
43 | テンプレート化された基底クラス内の名前へのアクセス方法を知っておこう | ||
44 | パラメータに依存しないコードはテンプレートから外に出そう | 42 | private な継承はよく考えてから使おう |
45 | 「すべての互換型」を受け取るためにメンバ関数テンプレートを使おう | ||
46 | 型変換をさせたいなら、メンバでない関数をクラステンプレートの中で定義しよう | ||
47 | 型の情報に関してはtraitsクラスを使おう | ||
48 | テンプレートメタプログラミングを意識しよう | ||
49 | new-handlerを理解しよう | 7 | メモリ不足に備えよう |
50 | どういうときにnewとdeleteの定義を自分で書くとよいか理解しよう | 10 | operator new を書くなら、operator delete も書こう |
51 | newとdeleteの定義を自分で書く場合はコンベンションに従おう | 8 | operator new と operator delete を書くときは規約を守ろう |
52 | プレースメントnewの定義を書いたらプレースメントdeleteの定義も書こう | 9 | 普通の形式の new を隠蔽しないように注意しよう |
53 | コンパイラの警告に注意を払おう | 48 | コンパイラの警告に注意しよう |
54 | TR1 を含む標準ライブラリになじもう | 49 | 標準ライブラリに精通しよう |
55 | Boostに親しもう |
*1:2006/07/20読了