这是我长期咆哮后的一个新问题。这里的问题是,我的主应用程序中有一个全局vector<Base*> vObjs
,并且每个静态库都链接到应用程序Derived obj
。如果我指定vObjs
的init_priority为101且静态库中的每个obj
都说... 1000,是否保证vObjs
将在{obj
之前调用其构造函数1}}在静态库中?谢谢你的帮助。
答案 0 :(得分:2)
让我回答您可能想要重新考虑使用全局变量的其他响应。然而,一个可能的(并且我确定仍有缺陷)改进至少消除了对init优先级的需要。
您可以创建一个返回对静态本地的引用的函数,而不是使用全局vector
。 C ++规则确保函数static local始终在第一次使用时初始化,因此您不必担心向量未被初始化。
vector<LibInfo*>& get_gvLibInfo()
{
vector<LibInfo*> gvLibInfo;
return gvLibInfo;
}
然后您的注册如下:
vector<LibInfo*>& get_gvLibInfo();
void reglib()
{
get_gvLibInfo().push_back(this);
}
答案 1 :(得分:1)
considered harmful已经nearly forty years,但人们仍坚持使用它们。为什么呢?
请reconsider your design因为它很脆弱,并且将在未来许多年内提供a maintenance headache。
答案 2 :(得分:0)
如果您使用的是GNU C ++,它们似乎保证了初始化的顺序(click here)。但是我应该注意,如果你真的依赖于初始化的顺序,那么你的设计是脆弱的。当您不关心订单时,更好地寻找替代品。 HTH