这是在C++中创建单例类的正确方法吗?
Is this correct way of creating a singleton class in C++?
可能的重复项:
单身人士有什么不好?
C++中的单例模式
我想创建一个单一实例类。为此,我创建了一个类,其所有成员和方法都是静态的。像这样的东西。
class a
{
static int a;
static GetA();
}
现在,所有想要使用我的单例类的类都无法为我的类创建任何对象,并且也将获得相同的值。我只想知道此实现是否会解决创建单例类的所有目的并满足所有条件。
我更喜欢:
GlobalObjectMgr& GlobalObjectMgr::instance()
{
static GlobalObjectMgr objMgr;
return objMgr;
}
不需要类成员变量,仅在需要时创建该变量。
传统的单例(反)模式不是静态变量的集合;相反,它是一个具有非静态成员的对象,其中只能存在一个实例。
在C++中,这使您可以避免静态变量的最大问题:"初始化顺序惨败"。由于不同翻译单元中的静态变量未指定初始化顺序,因此存在一个构造函数可能会在初始化之前尝试访问另一个构造函数的危险,从而产生未定义的行为。但是,它引入了其他问题(类似的"破坏顺序惨败",以及旧编译器中的线程安全问题),因此仍然需要避免。
如果你想要一个静态变量和函数的集合,那么把它们放在一个命名空间而不是一个类中:
namespace stuff {
int a;
void do_something();
}
如果你认为你想要一个单例,那么再想一想;你通常最好完全避免全局可访问的对象。如果你仍然想要一个,那么你可以创建一个带有私有构造函数的类,以及一个返回对单个实例的引用的公共访问器,如下所示:
class singleton {
public:
singleton & get() {
static singleton instance;
return instance;
}
int a;
void do_something();
private:
singleton() {}
~singleton() {}
singleton(singleton const &) = delete;
};
相关文章:
- C++ 实现模板单例类时出现链接错误
- 具有非默认构造函数的单例类
- 单例类析构函数无法清理 (SDL_Quit) MinGW
- 如何在单例类中管理变量状态?
- 访问单例类C++时出现问题
- 基于 IOKit 的 kext 驱动程序中的单例类
- 指向抽象模板单例类的指针向量C++?
- C++在单例类中创建类实例时遇到困难
- 如果我这样写,我的单例类会导致什么错误
- 这是一个有效的单例类吗?
- 函数内具有静态变量的单例类(迈耶实现)
- 继承的模板化单例类 c++ 中未定义的构造函数
- 为什么调用单例类 Qt 消息处理程序成员函数会出现错误:缺少参数列表
- C++:单例类设计(错误:未解析的外部符号)
- 构造函数在不同线程中的静态单例类上调用两次
- 如何在自定义单例类中使用log4cplus
- 为什么在C 中创建单例类创建期间静态函数参考静态变量
- 如何在静态单例类中以编程方式从exec方法返回
- 这是在C++中创建单例类的正确方法吗?
- 创建模板方法的最佳方式(对于单例类),它接收模板类作为参数