More Effective C++ 読書メモ2

本日はリソース管理について学んだ。コンストラクタ中で例外呼ぶなと聞いたことがあったが、部分的にしかコンストラクタが生成されないと、デストラクタが呼ばれないからだったのか。スマートポインタを使えば、メモリリソースの管理がずっと楽になる。可能な限り生ポインタではなく、スマートポインタを使おう。

本では std::auto_ptr だったが、boost::shared_ptr の方が良い。


p.37 – p.54

  • 配置 new: 既に割り当てられたメモリ領域にコンストラクタをロードする
    • new 演算子, operator new, 配置 new
  • 例外
    • 9項:リソースリークを防ぐためにデストラクタを使う
      • スマートポインタを使おう
      • C 風のライブラリでもスマートポインタの実装のようにラップすれば、リソース管理しやすくなる
    • 10項:コンストラクタでのリソースリークを防ぐ(重要)
      • コンストラクタ中で補足されない例外が起こった場合、デストラクタが呼ばれない
      • try-catch でコンストラクタ中に例外を監視し、発生した場合 delete
      • メンバ変数が const 付きの場合、初期化リスト内で初期化するような private 関数を用意
      • 結局、スマートポインタを使えば、上のような private 関数も必要なく、デストラクタは極めてシンプルになる
新訂版 More Effective C++ (AddisonーWesley professional co)
スコット・メイヤーズ
ピアソンエデュケーション
売り上げランキング: 259190

Posted in: c++ |

Leave a Reply

Your email address will not be published. Required fields are marked *