08/06/07 18:10:23
>>616
> 自分でメモリ管理すること利点欠点
これはJavaのメモリ管理に対してのC++のメモリ管理のことか?
利点
- 必要なくなったオブジェクトを即座に削除できるのでメモリの無駄が減る。
- デストラクタによって局所変数を即座に後処理することができる。
この仕組によりメモリ以外の一般リソースの後処理もできる。
これはオブジェクトの外で finally するより簡単である。
- new や delete のオーバーライドによってメモリ管理を簡単に変更できる。
- プールやスマートポインタなどによってオブジェクトの寿命を細かく制御できる。
また小さなオブジェクトのメモリ効率を良くすることができる。
- 基本型以外の型でも、必ずしも new する必要がない。
- GC のように不意に実行が中断されることがない。
- オブジェクトはある程度レイアウトを制御できるので他言語とリンクしやすい。
- 配置構文 new によって共有メモリや特殊なハードウェアを扱いやすい。
- ポインタ自体がオブジェクトなので Swap などの細かい操作が簡単である。
欠点
- new したら明示的に delete しなければならないことがある。
- ヒープメモリの実装によってメモリの断片化が起きやすい。
- オブジェクト所有権を意識していないプログラマはメモリリークを起こしやすい。
- オブジェクトの参照が入り組んでいるとダングリング参照を起こしやすい。
- ライブラリなどはオブジェクト所有権を明記していないと間違いを起こしやすい。
- 一般的なスマートポインタだと循環参照の扱いが難しい。
メモリリークの概念によっては GC を持つ言語でメモリーリークはある。
またオブジェクトが削除されないことが必ずしもメモリリークとは限らない。
> それがイベント駆動型アプリケーションにもたらす影響を教えて
これは知らない。
C++メモリ管理とイベント駆動の関係で嬉しかったことも困ったことも記憶にない。