在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. 全局變量初始化優化
- 2. 初始化常量和全局變量
- 3. 聲明和初始化全局變量
- 4. 使用PHP初始化全局變量
- 5. Perl未初始化的全局變量
- 6. 全局變量初始化查詢
- 7. 全局變量未初始化nodejs
- 8. 初始化全局常量變量是否安全?定義?
- 9. 全局變量的C++初始化順序
- 10. 在Obj中初始化全局變量C
- 11. 你能初始化全局變量到C++中嗎
- 12. 當C++全局變量未被顯式初始化時警告?
- 13. 初始化全局變量存儲器佈局
- 14. C#初始化變量
- 15. C#:初始化類變量
- 16. 用不同的方法初始化變量/對象與全局初始化
- 17. 初始化後未初始化的全局變量的位置在哪裏?
- 18. 全局變量始終初始化爲零
- 19. 什麼時候全局靜態常量變量被初始化?
- 20. 實際初始化的未初始化的局部變量?
- 21. 局部變量保持未初始化
- 22. TensorFlow:何時初始化局部變量
- 23. 局部變量初始化的Java
- 24. 未初始化的局部變量!
- 25. 初始化線程局部變量
- 26. 瞭解局部變量初始化
- 27. 局部變量尚未初始化?
- 28. 調試Tensorflow掛在全局變量初始化
- 29. 全局變量如何被精靈加載器初始化
- 30. JMeter一次只有全局變量初始化
你在堆上分配對象嗎? – Adrian 2012-03-08 18:11:19