Is this correct way of creating a singleton class in C++?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What is so bad about singletons?
Singleton pattern in C++
我想创建一个单例类。为此,我创建了一个类,它的所有成员和方法都是静态的。像这样。
1 2 3 4 5 | class a { static int a; static GetA(); } |
现在,所有想要使用我的singleton类的类都不能为我的类创建任何对象,也将获得相同的值。我只想知道这个实现是否能够解决所有的目的,满足创建单例类的所有标准。
我更喜欢:
1 2 3 4 5 | GlobalObjectMgr& GlobalObjectMgr::instance() { static GlobalObjectMgr objMgr; return objMgr; } |
不需要类成员变量,仅在需要时创建。
传统的单例(反)模式不是静态变量的集合,而是一个具有非静态成员的对象,其中只能存在一个实例。
在C++中,这允许您避免静态变量最大的问题:"初始化顺序Fasaso"。由于不同翻译单元中的静态变量的初始化顺序未指定,因此一个的构造函数可能会在初始化之前尝试访问另一个变量,从而给出未定义的行为。但是,它引入了其他问题(类似的"破坏顺序失败",以及旧编译器中的线程安全问题),因此仍然需要避免。
如果需要静态变量和函数的集合,请将它们放在命名空间而不是类中:
1 2 3 4 | namespace stuff { int a; void do_something(); } |
如果你认为你想要一个单例,那么再考虑一下;你通常最好避免使用全局可访问的对象。如果您仍然需要一个,那么您将使用一个私有构造函数和一个公共访问器来创建一个类,该访问器将返回对单个实例的引用,其行如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class singleton { public: singleton & get() { static singleton instance; return instance; } int a; void do_something(); private: singleton() {} ~singleton() {} singleton(singleton const &) = delete; }; |