全局变量的命名空间

时间:2014-07-11 10:38:47

标签: c++ namespaces sdl global sdl-2

我想要可以访问我的所有应用程序的变量。这是不好的做法吗?如果是这样,为什么?

namespace Global
{
    SDL_Window* window;
    SDL_Renderer* renderer;
    UI* new_view;
}

另一个建议:

如何将指向全局变量的指针传递给构造函数中的类并将其保存为局部变量?

class A
{
    SDL_Renderer* m_renderer;

    A(SDL_Renderer* renderer);
} 

A::A(SDL_Renderer* renderer)
{
    m_renderer = renderer;
}

2 个答案:

答案 0 :(得分:2)

  

这是不好的做法吗?

是的,使用全局变量是不好的做法,无论这些变量是否放在单独的命名空间中。

  

如果是这样,为什么?

它在系统模块中引入了不必要的依赖关系。将数据和行为本地化为类,这些类负责执行特定的操作 在极少数情况下,单例是有意义的,但是这些不应该只是全局变量,而是有一个静态成员(或免费)函数来访问它们。

答案 1 :(得分:0)

是的,这很糟糕。
好的部分:你解决了第一个不良原因(混乱全局命名空间),
但是不要将自己的名称空间命名为“Global”。选择更独特的东西。
不好的部分:还有更多的东西,比如创建不需要的依赖项 (如果B部分没有修改值,程序部分A将不起作用)