letsboost::メモリ管理

トップページ

概要

C++にはガーベジコレクタのような機構が言語的には存在しないため、 new したものは必ず delete するしないと、 メモリリーク・リソースリークの原因となってしまいます。しかし、 全ての new に対して確実に delete 出来るように見張って注意深くコードを書く、というのはなかなか面倒ですし、 人力でやるのはバグを呼びやすいところです。

というか、基本的には、そういうコードを書いてはいけません。 自分のコードに delete が登場したらそのコードは間違っていると思って良いくらいです。 C++ では、使わなくなったら自動で delete されるポインタ、 いわゆる「スマートポインタ」を使用します。 標準ライブラリにはこの目的で auto_ptr というテンプレートが実装されていますが、 こいつは同時には一カ所からしか利用しないことが前提だったり、 vector<T> 等のコンテナに入れられなかったりと、 すこーし使い勝手に不満が残ります。 ここでは、その辺りを解消する幾つかのスマートポインタを紹介します。

それともう一つ、細かいnew/deleteによるパフォーマンス低下を避けるため、 一括で巨大なメモリブロックを確保して、 固定サイズのメモリ確保に特化した処理を行う「メモリプール」などもあります。

内容

pool
メモリプール
scoped_ptr, scoped_array
スマートポインタその1 (共有されないオブジェクト用)
shared_ptr, shared_array, weak_ptr
スマートポインタその2 (参照カウント式:共有オブジェクト用)
intrusive_ptr
スマートポインタその3 (侵入型参照カウント式)


flyweight
Flyweightパターンによるリソース共有
presented by k.inaba (kiki .a.t. kmonos.net) under CC0