C++にはガーベジコレクタのような機構が言語的には存在しないため、
new
したものは必ず delete
するしないと、
メモリリーク・リソースリークの原因となってしまいます。しかし、
全ての new
に対して確実に delete
出来るように見張って注意深くコードを書く、というのはなかなか面倒ですし、
人力でやるのはバグを呼びやすいところです。
というか、基本的には、そういうコードを書いてはいけません。
自分のコードに delete が登場したらそのコードは間違っていると思って良いくらいです。
C++ では、使わなくなったら自動で delete
されるポインタ、
いわゆる「スマートポインタ」を使用します。
標準ライブラリにはこの目的で
auto_ptr
というテンプレートが実装されていますが、
こいつは同時には一カ所からしか利用しないことが前提だったり、
vector<T>
等のコンテナに入れられなかったりと、
すこーし使い勝手に不満が残ります。
ここでは、その辺りを解消する幾つかのスマートポインタを紹介します。
それともう一つ、細かいnew/deleteによるパフォーマンス低下を避けるため、 一括で巨大なメモリブロックを確保して、 固定サイズのメモリ確保に特化した処理を行う「メモリプール」などもあります。