C++;全局变量的初始化 在C++中,什么是最好的方式来实现一个需要在主程序中被初始化的对象,但是必须是全局的,所以它可以从整个程序的其他函数访问吗?并确保调用析构函数以确保它得到正确清理 struct foo {}; foo *x_ptr; int main() { foo x; x_ptr = &x; // the rest }

C++;全局变量的初始化 在C++中,什么是最好的方式来实现一个需要在主程序中被初始化的对象,但是必须是全局的,所以它可以从整个程序的其他函数访问吗?并确保调用析构函数以确保它得到正确清理 struct foo {}; foo *x_ptr; int main() { foo x; x_ptr = &x; // the rest },c++,raii,C++,Raii,如果您不想通过operator->访问成员,也可以使用std::reference\u wrapper 但真的,不要那样做。如果需要,将其传递,而不是使其全球化,例如 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 } 我怀疑“

如果您不想通过
operator->
访问成员,也可以使用
std::reference\u wrapper

但真的,不要那样做。如果需要,将其传递,而不是使其全球化,例如

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
}
我怀疑“全球”是一种解决方案,而不是一种要求。正如有人建议的那样,您可以始终显式地传递对象

如果您不想这样做,我可能会使用一个,可能包装在实现中的。您的
shared_ptr
将在程序启动时初始化为
null
,并在
main()
中设置为有效值


请注意,如果您有依赖于其他全局变量的全局变量,则可能会遇到销毁顺序问题。关于单例模式的缺点也有大量的文献。

你是在堆上分配对象吗?他说不要这样做的原因是因为在一个复杂的系统中,拥有一个任何东西都可以修改的全局变量会变得非常危险,因为你不知道是什么实体在改变它;调试会变得非常困难。是的,我不能想象全局性是一种需求。就做一个,传给大家。对依赖关系要明确。