Sakamori's Blog

アクセスカウンタ

zoom RSS Singletonにおけるメモリリーク

<<   作成日時 : 2010/04/13 23:49   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

久々に技術ネタ。
C++にてSingletonを実装するとstaticをどこかに使用して、Instanceをプロセス中に一つであることを保証するプログラムになる。このときStaticだからこのInstanceの解放はやらなくてもいいやという場合がおおい。Singletonについてよく書けているこのページでは、メモリリークと表示されるまでSingletonオブジェクトは存在するべきとも書いてある。私も深く考えず、そんなものだろうなと思っていたが、別件でメモリリークを調べていてメモリリークの発生しないSingletonの例を見つけた。
コードの量がちょっと増えてしまうが、メモリリークチェックのたびに大量に表示されて悩まされている方はこれを参照して実装してみてはどうだろうか。
ただし、ここの実装ちょっと古くこのままではgcc3.4.x付近以上では"too few template-parameter-lists"と表示されてコンパイルエラーとなる。昔のコンパイラで動作するコードがこのエラーで動作しない場合はだいたい、こういうことらしい。要するにtemplate <>っていうのをつけて、きちんと初期化すると。
具体的に上記Singletonの例を修正すると

typedef CSingleton<OneOf> tOneOf;
template <> tOneOf::InstPtr tOneOf::sm_ptr = tOneOf::InstPtr();


こんな感じになるはず。

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Singletonにおけるメモリリーク Sakamori's Blog/BIGLOBEウェブリブログ
文字サイズ:       閉じる