Ago*_*ino 0 c++ stl header global-variables
现在我在头文件中创建一个向量.记住,我不只是宣布它.
std::vector<int> attacked_nodes = std::vector<int> ();
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它给了我一些疑虑.这不是在适当的类的上下文中,它只是许多函数使用的变量.
我想知道这是不是
我四处寻找,是的.
注意:这可能是一个糟糕的编码习惯,我明白了.我想知道的是它是否真的不正确?
我宁愿不使用new来创建指针,也许我可以使用new并保存引用?它仍然不优雅,但可能会奏效.
谢谢.
它是有效的C++,但它并不是一个好的设计.您正在头文件中定义全局对象.这有两个问题:"全局"位和"在头文件中"位.
让我们从头文件问题开始.C++有一个称为单定义规则的规则,其中一部分要求您在整个程序中没有对象的多个定义.如果将此头文件包含在多个实现文件中(请记住,就像将标头内容复制并粘贴到源文件中一样),您将拥有多个定义,因此会破坏一个定义规则.
现在全局状态的问题是它隐藏了依赖关系.您提到您有许多使用此对象的函数,但是从这些函数的调用站点中它们使用该对象并不清楚.即使您使用完全相同的参数调用它们,您的函数也可能返回不同的结果,这仅仅是因为此全局状态可能已更改.这是糟糕的界面设计,使得功能更难以测试(和信任).