【问题标题】:Differences between Singleton and global variable [duplicate]单例和全局变量之间的区别[重复]
【发布时间】:2017-03-18 04:46:14
【问题描述】:

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

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

例如:

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

    void function();
};

将等同于:

class NotSingleton
{
public:
    NotSingleon();
    ~NotSingleton()
    void function();
};
NotSingleton nsg;

但是,没有什么能阻止我使用多个 NotSingleton

【问题讨论】:

  • 不记得 SO 用户,但有人告诉我它在多线程上下文中更安全。
  • 另外,如果使用全局变量,当程序启动时,这个对象必须被初始化。如果你使用 Singleton,那么你可以创建它直到你第一次使用它。在极端情况下,直到程序结束才需要使用它,因此根本不必创建 Singleton。所以使用 Singleton 可以让你只在需要的时候创建它。其次,在多线程程序中,如果只是直接访问全局变量,可能会导致难以调试的问题。

标签: c++ design-patterns


【解决方案1】:

当我们不想创建多个对象时使用单例。单例类确保创建的对象不超过一个。但是,拥有一个全局对象并不能确保这一点。

class Singleton {
    public static Singleton object = null;
   
    public void singleton() {
        if (object == null)
            object = new Singleton();
        return object;
   }
}

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

【讨论】:

  • 您对单例模式的最初目的是完全正确的。但在我见过的大部分代码中,它实际上是用来替代全局变量的。
  • 可能是因为prople不熟悉这个概念。
  • 这是错误的。您确定您的实现确保始终存在一个实例吗?
  • 由于 Singleton 对象是静态的,这意味着只能有一个实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
  • 2022-06-16
  • 2012-10-06
  • 2015-10-21
  • 2013-01-06
相关资源
最近更新 更多