这是用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++?

下一篇: Are there any downsides to the singleton pattern?