Effective C++ メモ
第 8 章 new と delete のカスタマイズ
49 項 new-handler を理解しよう
覚えておくこと
- set_new_handler によって、「要求したメモリ確保に失敗したときに呼び出されるエラー処理関数」を指定することができる。
- nothrow 型の new は、メモリ確保の際にだけ例外を投げないと保証する。メモリ確保後のコンストラクタが例外を投げるかもしれない。
50 項 どういうときに new と delete の定義を自分で書くとよいかを理解しよう
覚えておくこと
- 「効率をよくする」、「ヒープ仕様での間違いを見つける」、また、「ヒープ使用のデータを集める」などの理由で、new と delete をカスタマイズするとよい場合がある。
これはそのままの意味です。
51 項 new と delete の定義を自分で書く場合はコンベンションに従おう
覚えておくこと
- operator new は、メモリ確保のための無限ループを持たなければならない。また、要求されたメモリを確保できない場合には new-handler を呼び出さなけれなならない。さらに、ゼロバイトの要求にも対処しなければならない。クラス用の場合、予想より大きなメモリを要求された場合の対処も書かなければならない。
- operator new は、ヌルポインタを渡された場合、何もしないようにする。クラス用の場合、予想より大きなメモリを要求された場合の対処も書かなければならない。
52 項 プレースメント new の定義を書いたらプレースメント delete の定義も書こう
覚えておくこと
- operator new のプレースメント版を書くときには、対応するプレースメント版の operator delete を書くことを忘れないように。もし忘れると、微妙で断続的なメモリ漏れを起こしてしまうかもしれない。
- プレースメント版の new と delete を宣言するときに、普通の new と delete を意図せずに隠蔽しないように気をつけよう。
戻る