单例和全局变量的区别

Ast*_*not 6 c++ design-patterns

我知道单例只允许一个对象的一个​​实例。单例中声明的每个方法都只会对该对象进行操作。我想知道为什么不简单地声明一个可以实现相同目标的全局对象?

我肯定忘记了什么。如果单例存在,则必须有特定的用途或有助于实现特定的机制。

例如:

class Singleton
{
public:
    static Singleton& Instance()
    {
        static Singleton sg;
        return sg;
    }

    void function();
};
Run Code Online (Sandbox Code Playgroud)

将与以下相同:

class NotSingleton
{
public:
    NotSingleon();
    ~NotSingleton()
    void function();
};
NotSingleton nsg;
Run Code Online (Sandbox Code Playgroud)

但是,没有什么可以阻止我使用多个实例NotSingleton

Usa*_*lvi 3

当我们不想创建多个对象时,可以使用 Singleton。Singleton 类确保创建的对象不超过一个。然而,拥有一个全局对象并不能保证这一点。

class Singleton {
    public static Singleton object = null;
   
    public void singleton() {
        if (object == null)
            object = new Singleton();
        return object;
   }
}
Run Code Online (Sandbox Code Playgroud)

该类不会创建多个对象。这就是 Singleton 类的目的。