这是用C ++创建单例类的正确方法吗?
可能重复:
单身人士有什么不好?
C ++中的单例模式
我想创建一个单例类。 为此,我创建了一个类,其所有成员和方法都是静态的。 像这样的东西。
class a
{
static int a;
static GetA();
}
现在所有想要使用我的单例类的类都不能为我的类创建任何对象,并且也会得到相同的值。 我只想知道这个实现是否能够解决所有的目的,并满足创建单例类的所有条件。
传统的Singleton(反)模式不是静态变量的集合; 相反,它是具有非静态成员的对象,其中只有一个实例可以存在。
在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;
};
我更喜欢:
GlobalObjectMgr& GlobalObjectMgr::instance()
{
static GlobalObjectMgr objMgr;
return objMgr;
}
没有需要的类成员变量,只在需要时才创建。
链接地址: http://www.djcxy.com/p/82169.html上一篇: Is this correct way of creating a singleton class in C++?