gpt4 book ai didi

c++ - 定义一个全局变量并在那里自己初始化它可以吗?

转载 作者:行者123 更新时间:2023-11-30 00:38:16 25 4
gpt4 key购买 nike

我使用了一个全局变量(一个类的对象),定义如下:

//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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com