【问题标题】:Why is Singleton a better choice than Global Objects [duplicate]为什么单例比全局对象更好[重复]
【发布时间】:2013-02-18 01:22:14
【问题描述】:

你好堆栈溢出。

我正在准备明天的 CS 考试,我正在查看我们的教授为我们提供的复习表。其中一点说要知道为什么 Singleton 是比 Global 更好的选择。

我不太确定其中的原因,但我确实记得他说过 Singleton 使用较少的“命名空间污染”。我在 Google 上进行了几次比较 Singleton 和 Global 的搜索,但几乎所有结果都表明两者都是糟糕的选择,哈哈。所以这让我不再困惑了。

如果有人能帮我解决这个问题,将不胜感激。谢谢!

【问题讨论】:

  • 单例 全局对象。这就像问为什么方法比成员函数更好。
  • 嗯,static order initialization fiasco 令人沮丧,但两者都不是很好。
  • 啊,found it
  • 我不同意“使用较少的命名空间污染”。当然,对于全局类或单例类,仍然有一个名称。名称可能不同,但仍然是某种可能与另一个名称发生冲突的名称。但如果这是你的导师要求的答案,那就记住它。
  • @ModdedLife 您创建了一个包含一堆值和函数的命名全局对象,而不是一堆函数和值,每个函数和值都有自己的全局可用名称。

标签: c++ namespaces singleton global-object


【解决方案1】:

它们是懒惰的构造:

LargeObject   global;                    // Large object is always constructed.

class LargeObject_Singelton
{
    public: static LargeObject& getInstance()
    {
        static LargeObject  instance;     // This object is not created until the first
        return instance;                  // time getInstance() is called.
    }                                     // If you never use it this can be important.
};

【讨论】:

  • 嗯。请您再深入一点解释一下吗?
  • 可以懒惰构造。如果可能有多个线程访问它们,那么惰性构造实际上是一个问题(因为您需要另一个全局对象来锁定对实例的第一次调用)。
  • @ModdedLife:不知道还有什么要说的。全局总是被创建的。 singelton 仅在您需要时创建。如果创建对象的成本很大,您可能不想创建对象,除非您需要它。
  • 我认为如果有一个并不总是需要的大对象,您可能希望能够在某个时候将其删除。
  • @john.pavan:Singelton 在程序结束时被正确销毁。以及为什么要破坏创建成本高昂的东西。这意味着您必须再次支付费用。懒惰评估的全部意义在于投入成本(如果你不需要,就不要付钱)。
猜你喜欢
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2014-01-25
  • 1970-01-01
相关资源
最近更新 更多