我使用了一个全局变量(一个类的对象),定义如下:
//foo.h
extern class_name obj_name;
//foo.cpp
class_name obj_name("directory of a .ttf file");
我在我的 main() 函数所在的 main.cpp 中包含了 foo.h。
问题是我不太愿意在那里初始化它,因为它不在函数内部。它是公开的。我宁愿调用一个初始化对象的“init()”函数,如:
object_name = class_name(parameters);
来自 main() 函数。
但是该类是第 3 方类,它不接受在我们没有为构造函数提供参数的情况下创建的对象。也许它没有默认的无参数构造函数。
我上面所做的是好的编码风格吗?
最佳答案
没有。
如果没有很好的理由,不要在 C++ 中使用全局变量。
- 您将遇到“静态初始化顺序失败”。
- 你会得到难看的意大利面条代码。
- 您的代码将很难测试。
如果您的全局是第 3 方类型,则尤其如此。
考虑使用更好的方法,例如允许延迟初始化的工厂方法。 或者只是将对象传递给需要它的函数。
还可以考虑用您自己的类包装第 3 方类 - 仅提供测试它所需的最少接口(interface),并使用指向该抽象基类的指针。 (或者,如果第 3 方库支持它 - 使用它们提供的最小界面,您可以使用它)
关于c++ - 定义一个全局变量并在那里自己初始化它可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11308193/