静态库中变量的init_priority属性

时间:2010-10-08 10:05:59

标签: c++ linux g++

这是我长期咆哮后的一个新问题。这里的问题是,我的主应用程序中有一个全局vector<Base*> vObjs,并且每个静态库都链接到应用程序Derived obj。如果我指定vObjs的init_priority为101且静态库中的每个obj都说... 1000,是否保证vObjs将在{obj之前调用其构造函数1}}在静态库中?谢谢你的帮助。

3 个答案:

答案 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)

对于Global Variables

considered harmful已经nearly forty years,但人们仍坚持使用它们。为什么呢?

reconsider your design因为它很脆弱,并且将在未来许多年内提供a maintenance headache

答案 2 :(得分:0)

如果您使用的是GNU C ++,它们似乎保证了初始化的顺序(click here)。但是我应该注意,如果你真的依赖于初始化的顺序,那么你的设计是脆弱的。当您不关心订单时,更好地寻找替代品。 HTH