stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?
Meuck 2007-04-22 04:46:56 /*
stl 是不是不能在main函数开始之前调用?是否stl本身在main之前就有初始化?
我在全局对象的构造函数中时候使用 std::list 的时候出错。
虽然下面的代码可能能正常运行。但是我的代码同下面的代码类似,
开头也是可以正确运行,之后加了些代码之后,一使用push_back就出错。(记得是内存越界吧)
后来我使用自已写的list就没问题了。
我的环境是vc6.0 + stlport 4.6.2,是这个环境的问题?还是STL普遍的问题?
或者说还有其它可能?
*/
#include <iostream>
#include <list>
using namespace std;
typedef void (*INIT_FUN)(void);
struct INIT_ADD
{
INIT_ADD( INIT_FUN pfun );
};
struct GLOBAL_DATA
{
static list<INIT_FUN> s_link;
};
list<INIT_FUN> GLOBAL_DATA::s_link;
INIT_ADD::INIT_ADD(INIT_FUN pfun)
{
GLOBAL_DATA::s_link.push_back (pfun);
}
enum {DATA_COUNT = 10};
int g_InitData[DATA_COUNT];
void InitDataFunction()
{
for ( int i = 0;i < DATA_COUNT; ++i)
{
g_InitData[i] = i;
}
}
INIT_ADD g_Add( &InitDataFunction ); //添加初始化函数
int main(int argc, char* argv[])
{
//初始化所有初始化函数
list<INIT_FUN>::iterator iter;
for (iter = GLOBAL_DATA::s_link.begin(); iter != GLOBAL_DATA::s_link.end(); ++iter)
{
(*iter)();
}
for ( int i = 0; i < DATA_COUNT; ++i )
{
cout << g_InitData[i] << endl;
}
return 0;
}