IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

new と delete と throw で気をつけること(自分用メモ)

  • delete する変数が未初期化になっている可能性を考えろ
    • コンストラクタの初期化子リストで throw とか
      • 初期化子リストで throw する可能性のある式を評価するな。 0 を入れておいて、コンストラクタ内で評価しろ
      • または、ポインタラッパー的なものを使え。(デフォルトコンストラクタで初期化されるから)
    • 未初期化変数への代入式で throw とか
      • とりあえず、変数初期化子で 0 代入しとけ
  • コンストラクタで例外が発生した場合にデストラクタが呼ばれないことに注意しろ
    • コンストラクタ内で new して、そのままとか
      • boost::shared_ptr 使え
      • または、 try { /* ... */ } catch(...) { delete p; throw; } って感じで、すべての例外を catch して delete しとけ