【问题标题】:Why GitHub C++ Core Guideline says that global object better than singleton?为什么 GitHub C++ 核心指南说全局对象比单例更好?
【发布时间】:2015-11-09 09:40:18
【问题描述】:

The Github C++ Core Guidelines说:

全局对象通常比单例更好。

我一直认为相反。从那时起,C++ 发生了什么变化? 或者可能只是另一个错字?

【问题讨论】:

  • 来自互联网的随机指南不比它们包含的解释/理由更有价值。在这种情况下,它没有,所以它毫无价值。您很可能会发现其他一些相反的指导方针。如果您想针对特定问题提出合理的论据,例如“何时更喜欢单例而不是全局对象,反之亦然”,最好直接问。
  • 再看一遍。它说作为一个例外 规则反对 全局变量,标题为“避免非常量全局变量”。不要断章取义。
  • @TonyD 这不是随机的,因为是 Stroustrup 提出的。
  • @TonyD,但是……但是……作者……
  • @alexolut 所以问问 Stroustrup。在这里问有什么意义? Bjarne 是会员吗?

标签: c++ singleton global-object


【解决方案1】:

这是避免来自同一 guideline collection 的单例的理由:

I.3:避免单例

原因

单例基本上是伪装的复杂全局对象。

例子

class Singleton {
    // ... lots of stuff to ensure that only one Singleton object is created,
    // that it is initialized properly, etc.
};

单例的想法有很多变体。这是问题的一部分。

我对作者意图的分析:

越简单越好。如果在单例中伪装全局对象并不能解决全局对象的问题——就像上面的指南所暗示的那样——那么通过使用伪装来使代码复杂化是没有用的。

【讨论】:

  • 单例和全局对象都不好。但是为什么作者推荐使用全局对象而不是单例呢?就是这个问题。
  • @alexolut 这只是一个偏好问题,全局变量并没有那么糟糕,并且在某些地方很有用。只是它们很难处理
  • @alexolut 引用的准则指出单例是伪装的全局对象。我会推断这意味着它们不能解决全局对象的问题。它还指出单例比全局对象更复杂。越简单越好。
  • 如果您在此答案中阅读了 I.3 指南的例外情况,则 “您可以使用最简单的“单例”(如此简单以至于它通常不被视为单例)来在首次使用时进行初始化”,因此作者几乎不会认真反对单身人士。
  • 指南如何解决在应该只有一个对象实例(如物理资源)的情况下使用单例?
猜你喜欢
  • 2013-02-18
  • 2012-08-10
  • 1970-01-01
  • 2017-03-07
  • 2010-10-19
  • 2013-12-30
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多