这是我长时间咆哮后的一个新问题。这里的问题是,我的主应用程序中有一个全局的vector<Base*> vObjs
,我在每个链接到应用程序的static lib中获得了Derived obj
s。如果我指定vObjs
的init_priority为101,并且每个obj
在静态库中的含义为...... 1000,是否保证vObjs
将在静态库中获得在obj
之前调用的构造函数?谢谢你的帮助。静态库中变量的init_priority属性
回答
让我回应你可能想要重新考虑使用全局变量的其他答案。然而,一个可能的(我肯定仍然存在漏洞)至少可以消除对init优先级的需求。
而不是使用全球vector
,您创建一个函数返回对静态本地的引用。 C++规则确保函数static local始终在第一次使用时最初被初始化,所以您不必担心vector未被初始化。
vector<LibInfo*>& get_gvLibInfo()
{
vector<LibInfo*> gvLibInfo;
return gvLibInfo;
}
您的注册看起来像:
vector<LibInfo*>& get_gvLibInfo();
void reglib()
{
get_gvLibInfo().push_back(this);
}
如果您使用的是GNU C++,它们似乎可以保证初始化的顺序(click here)。但是我应该注意,如果你真的依赖初始化的顺序,那么你的设计是脆弱的。当你不关心订单时,更好地寻找替代品。 HTH
实际上,该值越高,传递给'init_priority',低优先级有。 – nakiya 2010-10-08 10:18:19
@nakiya:我的坏,编辑 – 2010-10-08 10:23:11
Global Variables已被considered harmful替换为nearly forty years,但人们仍然坚持使用它们。为什么?
请reconsider your design,因为它很脆弱,并会在未来很多年内提供a maintenance headache。
- 1. 静态变量[AppStore]属性之间共享[ThreadStatic]属性
- 2. 静态类中的静态属性
- 3. asp.net中的类库和静态变量
- 4. Android性能的静态变量或属性
- 5. PHP中的静态属性
- 6. PHP:引用静态变量中的另一个静态变量
- 7. 同一类中的Java静态变量和非静态变量
- 8. PHP中的静态变量变量
- 9. C++中的静态变量
- 10. Monodroid中的静态变量
- 11. ASP.NET中的静态变量
- 12. asp.net中的静态变量?
- 13. PHP中的静态变量
- 14. asp.net中的静态变量
- 15. ruby中的静态变量
- 16. R中的静态变量
- 17. Java中的静态变量?
- 18. ObjectiveC中的静态变量
- 19. Tcl中的静态变量
- 20. Python中的静态变量?
- 21. Android中的静态变量
- 22. WCF中的静态变量
- 23. Java中的静态变量
- 24. 静态变量
- 25. 静态变量
- 26. 静态变量
- 27. 静态变量
- 28. 静态变量
- 29. 静态变量
- 30. 修改静态变量的Arduino库
谢谢。我打算使用__attribute __((init_priority())),但这种方法看起来好一些。 – nakiya 2010-10-08 15:46:11