S.F.Tracker(233)

公開:2007-04-07 06:14
更新:2020-02-15 04:36
カテゴリ:sftracker,c++,windows,audio,tracker

昨日は自作のsingletonクラステンプレートが、アプリ終了時にリソースリークする問題の原因究明を行なっていた。
原因は、#define BOOST_SP_USE_QUICK_ALLOCATORしていたため。

これを行なうと、内部でquick allocatorが使われ、さらに内部にstaticなmutexが定義される。
この状態でstaticなshared_ptrを定義すると、ポインタを破棄するときにmutexでロックするのだが、先にmutexオブジェクトが破棄されているので一般保護違反となる。

staticなオブジェクトの破棄順序は不定であり、破棄する順序をプログラマがコントロールすることは難しい。

コメントアウトするとquick allocatorが利用されなくなるために直るのだが、何故利用されなくなると直るかはもう少し調べないとわからない。