在C ++中,最好的方法是让一个对象需要在main()中初始化,但必须是全局的,所以可以从整个程序中的其他函数访问它?并确保调用析构函数以确保它被正确清理?
答案 0 :(得分:4)
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
}
答案 1 :(得分:3)
我怀疑“全球”是一种解决方案,而不是一种要求。正如已经建议的那样,您可以始终明确地传递您的对象。
如果您不想这样做,我可能会使用shared::ptr
,可能包含在Singleton实现中。您的shared_ptr
会在程序启动时初始化为null
,并在main()
中设置为有效值。
请注意,如果您的全局变量依赖于其他全局变量,则可能会遇到破坏问题的顺序。关于Singleton模式的缺点也有大量文献。