これを実現するために何か間違ったことをしたと確信しています。理にかなっているように見える方法でマップを静的に宣言するライブラリを使用しています。
ヘッダーの Codec というクラスで:
typedef map< String, Codec* >::type CodecList;
static CodecList msMapCodecs;
cpp ファイルで:
map< String, Codec * >::type Codec::msMapCodecs;
cpp ファイルの行にブレークポイントを配置すると、「__static_initialization_and_destruction_0」というスタック フレームでこれが呼び出されることがわかりました。これにステップインすると、メインに到達する前にこのマップのコンストラクターが呼び出されることがわかります。main が開始された直後に、ライブラリ API の関数呼び出しを介していくつかのエントリを挿入すると、コンストラクターが 1 回目と同様の方法で 2 回目に呼び出されることに気付きます。
何がこれを引き起こす可能性がありますか、またはこれが起こっていると考えるほど私を混乱させる可能性のある誤解は何ですか? 検索しましたが、コンストラクターへの明示的な呼び出しが表示されません。最小限のテストケースではこれを複製できませんでした。正確な答えを提供することは不可能であることは承知していますが、良い方向性を示すものは何でもありがたいです.
問題があれば、Ubuntu 12.04 で gcc 4.6.3 を使用しています。x64