這是我長時間咆哮後的一個新問題。這裏的問題是,我的主應用程序中有一個全局的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. 靜態變量與靜態屬性
- 2. 剿從GCC init_priority屬性
- 3. 靜態類中的靜態變量和非靜態類中的靜態變量
- 4. 靜態變量[AppStore]屬性之間共享[ThreadStatic]屬性
- 5. 靜態類中的靜態屬性
- 6. asp.net中的類庫和靜態變量
- 7. Android性能的靜態變量或屬性
- 8. 如何在函數中設置靜態變量的屬性
- 9. 靜態函數中的靜態變量?
- 10. AngularJS中的「靜態」屬性
- 11. PHP中的靜態屬性
- 12. Java中的靜態屬性
- 13. WPF綁定常量變量VS靜態屬性
- 14. 靜態變量和全局變量在Linux上的動態庫和靜態庫中顯示不同的地址?
- 15. PHP:引用靜態變量中的另一個靜態變量
- 16. 全局靜態變量vs函數中的靜態變量?
- 17. 同一類中的Java靜態變量和非靜態變量
- 18. 具有靜態屬性的靜態類
- 19. PHP中的靜態變量變量
- 20. C++中的靜態變量
- 21. PHP中的靜態變量
- 22. WCF中的靜態變量
- 23. ObjectiveC中的靜態變量
- 24. TSQL中的靜態變量?
- 25. Tcl中的靜態變量
- 26. CodeIgniter中的靜態變量
- 27. R中的靜態變量
- 28. DotNet:DLL中的靜態變量
- 29. Java中的靜態變量?
- 30. VBScript中的靜態變量
謝謝。我打算使用__attribute __((init_priority())),但這種方法看起來好一些。 – nakiya 2010-10-08 15:46:11