我确信我做错了什么来实现这一点。我正在使用一个库,它以一种似乎有意义的方式静态声明地图。
在标题中,在一个名为 Codec 的类中:
typedef map< String, Codec* >::type CodecList;
static CodecList msMapCodecs;
在 cpp 文件中:
map< String, Codec * >::type Codec::msMapCodecs;
当我在 cpp 文件的行上放置一个断点时,我看到它在一个名为“__static_initialization_and_destruction_0”的堆栈帧中调用它,如果我进入它,我可以看到它在达到 main 之前调用了这个映射的构造函数。在 main 启动之后,我通过库 API 的函数调用插入了一些条目,然后我注意到构造函数被第二次调用,其方式与第一次类似。
是什么导致了这种情况,或者是什么和我的误解可能让我感到困惑以至于认为这正在发生?我已经搜索过,但没有看到对构造函数的显式调用。我无法在最小的测试用例中复制它。我知道提供一个准确的答案是不可能的,但是任何能给我指明好的方向的东西都将不胜感激。
如果重要的话,我在 Ubuntu 12.04 上使用 gcc 4.6.3。x64