Efficient C++ 8~10章 まとめ

Efficient C++ 8章から10章の簡単なまとめです。

07項 newしたポインタのコンテナを使うときは、必ずポインタをdeleteした後にコンテナを破棄しよう

newしたポインタのコンテナを使うときは、必ずポインタをdeleteした後にコンテナを破棄しよう

06項 C++で最も奇妙な解析に注意しよう

C++で最も奇妙な解析に注意しよう

05項 単一要素メンバ関数より範囲メンバ関数を使おう

単一要素メンバ関数より範囲メンバ関数を使おう

04項 size()で0を調べる代わりにemptyを呼びだそう

size()で0を調べる代わりにemptyを呼びだそう一部の実装では、listのsizeが線形時間の処理になっているそうです。 なので、コンテナが空であるかどうかを調べるにはemptyを使うようにします。

03項 コンテナのオブジェクトを正しく効率的にコピーしよう

コンテナのオブジェクトを正しく効率的にコピーしよう コンテナにオブジェクトを追加するとき、オブジェクトのコピーが発生します。 コピーにはコストがかかりますし、基本クラスのコンテナに派生クラスのオブジェクトをコピーすると派生部分が切り落とされ…

02項 コンテナに依存しないコードという幻想に注意しよう

コンテナに依存しないコードという幻想に注意しよう

01項 コンテナは注意して選択しよう

コンテナは注意して選択しようタイトルがすべて、目的にあったコンテナを選ぶべきです。参考書籍Effective STL―STLを効果的に使いこなす50の鉄則作者: スコットメイヤーズ,Scott Meyers,細谷昭出版社/メーカー: ピアソンエデュケーション発売日: 2002/01メデ…

Efficient C++ 6~7章 まとめ

Efficient C++ 6章と7章の簡単なまとめです。

Efficient C++ 1~5章 まとめ

Efficient C++ 1章から5章の簡単なまとめです。

24項 仮想関数、多重継承、仮想基底クラスと実行時型識別のコストを理解する。

仮想関数、多重継承、仮想基底クラスと実行時型識別のコストを理解する。

23項 2つのライブラリーを使い分ける

2つのライブラリーを使い分ける同じ機能を持つライブラリーにも、速度を重視したものや安全性を重視するなどの特徴があります。 例えば、iostreamライブラリーは型の安全性や拡張性に優れますが、一般にstdioのほうが高速だそうです。 なので、ライブラリー…

22項 単独のopの代わりにop=を使うことを考える

単独のopの代わりにop=を使うことを考える

21項 暗黙的な型変換を避けるためのオーバーロード

暗黙的な型変換を避けるためのオーバーロード

20項 戻り値最適化の促進

戻り値最適化の促進

19項 テンポラリーオブジェクトの起源を理解する

テンポラリーオブジェクトの起源を理解する

18項 予想される計算のコストを償却する

予想される計算のコストを償却する積極評価についてです。

17項 遅延評価の使用を検討する

遅延評価の使用を検討する遅延評価とは、必要になるまで処理を遅らせるということです。

16項 80-20規則を覚えておこう

80-20規則を覚えておこう80-20規則とは、処理資源の80%は20%のコードによって使用されるという経験則です。 この20%のコードを見つけるために、プロファイラを使うべきです。

15項 例外処理のコストを理解する

例外処理のコストを理解する

14項 例外使用を賢く用いる

例外使用を賢く用いる

13項 参照で例外を捕まえる

参照で例外を捕まえる例外は参照で捕まえるべきです。ポインタで捕まえる場合は、ポインタの指すオブジェクトの存在を保証しなければならなくなり、値で捕まえると、引数に渡すときに無駄なコピーが起こるためです。

12項 例外の発生のさせ方と引数引き渡し・仮想関数呼び出しとの違いを理解する

例外の発生のさせ方と引数引き渡し・仮想関数呼び出しとの違いを理解する

11項 デストラクターから出る例外を抑える

デストラクターから出る例外を抑える

10項 コンストラクターでの資源の漏れを防ぐ

コンストラクターでの資源の漏れを防ぐ

09項 資源の漏れを防ぐためにデストラクターを使う

資源の漏れを防ぐためにデストラクターを使う

08項 new と deleteの別の意味を理解する

new と deleteの別の意味を理解する

07項 &&, ||, , をオーバーロードしない

&&, ||, , をオーバーロードしない

06項 インクリメント演算子とデクリメント演算子で前置形式と後置形式とを区別する

インクリメント演算子とデクリメント演算子で前置形式と後置形式とを区別する前置形式は"operator++()"で、後置形式は"operator++(0)"で呼び出されます。

05項 ユーザ定義の変換関数に気をつける

ユーザ定義の変換関数に気をつける

04項 根拠のない省略時コンストラクターを避ける

根拠のない省略時コンストラクターを避ける "省略時コンストラクター"とは"引数が必要ないコンストラクタ"のことです。この項のまとめでは、"引数が必要ないコンストラクタ"で記述を統一します。

03項 配列をポリモルフィズム的には扱わない

配列をポリモルフィズム的には扱わない

02項 C++スタイルのキャストを愛用する

C++スタイルのキャストを愛用するCのキャストと比べたC++のキャストの利点は、目的別に複数のキャストが用意されていることと、キャストが見分けやすいことです。

01項 ポインターと参照の違い

今日からMore Effective C++ を読みます。 24項まではブログにまとめ、それ以降は目を通すだけにします。1週間で読みきることを目標にします。ポインターと参照の違い

50項 C++をもっと理解するために

C++をもっと理解するためにこの本を読み終わった後、もっとC++を理解するために覚える、知るべきこと。

49項 標準ライブラリに精通しよう

標準ライブラリに精通しようこれもタイトル通りです。

48項 コンパイラの警告に注意しよう

コンパイラの警告に注意しようタイトルの通りです。

47項 非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにしよう

非ローカルstaticオブジェクトは、使用前に必ず初期化されるようにしようグローバルまたは名前空間で定義されていて、クラス内でstaticと宣言されている、またはファイルスコープでstaticと指定されたオブジェクトの初期化順序は特に規定されていません。 順…

46項 ランタイムエラーよりは、コンパイル時やリンク時のエラーのほうがいい

ランタイムエラーよりは、コンパイル時やリンク時のエラーのほうがいいC++はコンパイル時やリンク時のエラーを検出するのに優れています。 ランタイムにエラー検出を行うより、コンパイル時やリンク時に行うほうが安全なので、できる限りコンパイル時やリン…

45項 C++がどんな関数を黙って書き、呼び出しているのか、知っておこう

C++がどんな関数を黙って書き、呼び出しているのか、知っておこうクラスを書くときに、コピーコンストラクタ、代入演算子、コンストラクタ、デストラクタ、アドレス演算子を自分で宣言しないと、コンパイラが自動で作成します。

44項 あなたの意図することを言おう、自分が言っていることの意味を理解しよう

あなたの意図することを言おう、自分が言っていることの意味を理解しよう自分の書いたコードに含まれる、継承や包含、仮想関数がどういった意味を持つのか理解する必要があります。

43項 多重継承は慎重に使おう

多重継承は慎重に使おう 多重継承を使うと、名前衝突により問題が起こることがあります。 あいまいな状態になるときは、 ①同名の関数を複数継承したとき、関数を個別に再定義できない問題 ②1つのクラスを複数の経路で継承してしまうとき、名前解決があいま…

42項 privateな継承はよく考えてから使おう

privateな継承はよく考えてから使おう

41項 継承とテンプレートの違いを理解しよう

継承とテンプレートの違いを理解しよう継承 : オブジェクトが継承可能な関係で、型によって振る舞いを変えたいとき テンプレート : 複数の型に、型によって変わることのない振る舞いを与えたいとき。

40項 「それを持っている」関係や「それを実装手段とする」関係は、層を重ねる形でモデル化しよう

「それを持っている」関係や「それを実装手段とする」関係は、層を重ねる形でモデル化しようタイトルのような関係が成り立つときは、持たれるものを、親のデータメンバに含めます。 層を重ねる、包含、合成などと呼ばれています。

39項 継承の階層構造を下る方向のキャスト(ダウンキャスト)は避けよう

継承の階層構造を下る方向のキャスト(ダウンキャスト)は避けようダウンキャストを安全に行えるdynamic_castがありますが、dynamic_castは使うべきではありません。

38項 継承したデフォルトパラメータ値を再定義してはならない

継承したデフォルトパラメータ値を再定義してはならない基底クラスの仮想関数のデフォルトパラメータと、サブクラスの継承された関数のデフォルトパラメータが違う場合、基底クラスの仮想関数のデフォルトパラメータが継承された関数にも適用されます。 具体…

37項 継承した非仮想関数を再定義してはならない

継承した非仮想関数を再定義してはならない36項で、"非仮想関数を宣言する目的は、関数のインタフェースと強制的な実装を継承させる"としたので、継承した非仮想関数を再定義してはいけません。 継承した非仮想関数を再定義してしまうと、強制的な実装ではな…

36項 インタフェースの継承と実装の継承とを区別しよう

インタフェースの継承と実装の継承とを区別しよう

35項 publicに継承するときは、「その一種である」関係のモデルかどうか確認しよう

publicに継承するときは、「その一種である」関係のモデルかどうか確認しよう