C ++初始化全局变量

时间:2012-03-08 18:09:14

标签: c++ raii

在C ++中,最好的方法是让一个对象需要在main()中初始化,但必须是全局的,所以可以从整个程序中的其他函数访问它?并确保调用析构函数以确保它被正确清理?

2 个答案:

答案 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模式的缺点也有大量文献。