gpt4 book ai didi

c++ - 外部 vs 单例类

转载 作者:太空狗 更新时间:2023-10-29 19:49:12 26 4
gpt4 key购买 nike

假设我们有一些使用 extern 关键字的外部链接。

我有(在 class1.cpp 中):

MyClass* myClassVar = NULL;

构造函数初始化上述,析构函数删除。

然后在class2.cpp和class3.cpp中有:

extern MyClass* myClassVar;

这些类使用 myClassVar(进行通常的 null 检查等)。

单例会更受欢迎吗? (我知道全局变量不好等等,而单例只是语法糖)。将上面的代码更改为下面的代码是否有优势?

static Singleton& getInstance()
{
static Singleton instance;

return instance;
}

然后所有类都会做:

Singleton::getInstance()

最佳答案

全局变量遭受初始化顺序失败。单独翻译单元中的全局变量以未指定的顺序初始化,因此如果一个变量在其构造函数中引用另一个变量,则会出现未定义的行为。

函数作用域中的静态变量在第一次调用函数时被初始化,这(或多或少)解决了初始化顺序问题。

然而,更微妙的问题仍然存在;特别是,在对象被销毁后仍然可以访问它,并且有一些开销来确保线程安全的初始化(并且,在旧的编译器中,初始化可能根本不是线程安全的)。没有完全安全的方法来管理非平凡类型的全局可访问对象,我的建议是尽可能避免使用它们。

关于c++ - 外部 vs 单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12247912/

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