複数のDLLからスタティックライブラリ内のシングルトンのクラスを呼ぶと大変なことに。
先に結論
- DLL毎に異なるインスタンスが生成されます!
- なので、スタティックライブラリにせず、DLLにするべき
- どうしてもスタティックライブラリにしたい時は、シングルトンのクラス取得用のDLLを作れば大丈夫
実験
たとえばこんなのがあるとします。
ここで、
SubDLL1,SubDLL12およびmainから以下のインスタンスのポインタを取得します。
- SigleDLL
- SigleLIB
- GuardDLL経由で、SigleDLL
すると、それぞれのインスタンスのポインタは以下のようになります。
取得先 | インスタンスのポインタ |
---|---|
SingleDLL | 同一 |
SingleLIB | 異なる |
GuardDLL経由で、SigleDLL | 同一 |
つまり、上でも言ったように、
なんでなの?
以下は仮説です。
スタティックライブラリは静的リンク。
静的リンク(せいてきりんく)とは、アプリケーションプログラムをリンクした時に必要なライブラリをプログラムに含める方式。
via wikipadia("静的リンク")
なので、スタティックライブラリは、各dllに取り込まれて、それぞれ別のものとして動いている。
っていうのが理由だと思われます。
それであってるか確認中です。
わかったら、また更新します。
ややこしいね。
そんなですー。