在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