在C++中,如何讓一個需要在main()中初始化的對象的最佳方式是什麼?但是必須是全局的,所以可以通過程序中的其他函數訪問它?並確保調用析構函數以確保正確清理它?C++初始化全局變量
回答
struct foo {};
foo *x_ptr;
int main() {
foo x;
x_ptr = &x;
// the rest
}
您也可以使用std::reference_wrapper
如果你不想通過operator->
訪問的成員。
但是真的,不要這樣做。如果需要的話傳遞,而不是使其成爲全局的,例如,
void needs_foo1(foo&);
void needs_foo2(foo&, int, int, int);
int main() {
foo x;
needs_foo1(x);
needs_foo2(x, 1, 2, 3);
// et cetera
}
他說不這樣做的原因是因爲擁有一個全局變量,任何可以修改的全局變量在一個複雜的系統中變得非常危險,因爲你不知道哪個實體正在改變它;可能很難調試。 – sparkFinder 2012-03-08 18:45:13
我懷疑「全局」是一個解決方案,而不是一個需求。正如已經建議的,你總是可以明確地傳遞你的對象。
如果你不想這樣做,我可能會使用shared::ptr
,可能包裝在Singleton實施。您的shared_ptr
將在程序啓動時初始化爲null
,並在main()
中設置爲有效值。
請注意,如果您的全局變量依賴於其他全局變量,您可能會遇到銷燬問題的順序。還有關於Singleton模式缺點的大量文獻。
是的,我無法想象全局變量是一個需求。只需製作一個並傳遞給它。明確依賴關係。 – 2012-03-08 21:38:25
- 1. C++全局變量初始化順序
- 2. 在C初始化的全局變量++
- 3. 全局變量初始化優化
- 4. 初始化常量和全局變量
- 5. 使用PHP初始化全局變量
- 6. 全局變量不初始化
- 7. 聲明和初始化全局變量
- 8. 如何初始化的全局變量
- 9. Perl未初始化的全局變量
- 10. 全局變量未初始化nodejs
- 11. GCC,未初始化的全局變量
- 12. 問題初始化的全局變量
- 13. 全局變量初始化查詢
- 14. Flask藍圖初始化 - 初始化一些全局變量
- 15. 全局初始化C++類
- 16. C中的全局變量是否始終初始化爲零?
- 17. 初始化局部變量
- 18. 初始化全局常量變量是否安全?定義?
- 19. 在Obj中初始化全局變量C
- 20. C++全局變量和初始化順序
- 21. 全局變量的條件初始化C
- 22. 你能初始化全局變量到C++中嗎
- 23. C++如何正確初始化全局變量?
- 24. 當C++全局變量未被顯式初始化時警告?
- 25. 全局變量的C++初始化順序
- 26. 如何讓靜態變量初始化爲全局變量
- 27. 在循環中初始化變量 - 使用全局變量?
- 28. 初始化全局變量存儲器佈局
- 29. C#初始化變量
- 30. C#:初始化類變量
你在堆上分配對象嗎? – Adrian 2012-03-08 18:11:19