昨日は自作のsingletonクラステンプレートが、アプリ終了時にリソースリークする問題の原因究明を行なっていた。
原因は、#define BOOST_SP_USE_QUICK_ALLOCATORしていたため。
これを行なうと、内部でquick allocatorが使われ、さらに内部にstaticなmutexが定義される。
この状態でstaticなshared_ptrを定義すると、ポインタを破棄するときにmutexでロックするのだが、先にmutexオブジェクトが破棄されているので一般保護違反となる。
staticなオブジェクトの破棄順序は不定であり、破棄する順序をプログラマがコントロールすることは難しい。
コメントアウトするとquick allocatorが利用されなくなるために直るのだが、何故利用されなくなると直るかはもう少し調べないとわからない。