C++ Singleton Vs静态方法

c0d*_*0de 5 c++ methods singleton static

可能重复:
C++单例与完全静态对象

嗨,

为什么我更喜欢单例而不是静态类方法.

    MoneyPrinter::addJob(PrinterJob &job);
or
    MoneyPrinter::getInstance().addJob(PrinterJob &job);
Run Code Online (Sandbox Code Playgroud)

这只是风格问题吗?你用什么?为什么?

PS.我知道sigletons默认情况下不是线程安全的(第一次初始化).

Chr*_*isW 5

为什么我更喜欢单例而不是静态类方法

单例可以具有内部状态(在您的示例中,添加的作业列表),即单例类的成员数据.

你用什么?为什么?

如果没有状态,那么静态方法因为这是最简单的.

否则单个,最好是静态初始化(而不是初始化或运行时初始化).

  • 你可以使用静态方法,它只是静态变量. (6认同)
  • 如果没有状态,为什么只使用静态方法创建一个永远不会被实例化的类*在一种没有一切都必须在类迷信*的语言中?只需让它成为一堆函数,也许在适当的命名空间中。 (2认同)

T33*_*33C 3

单例使您可以控制类何时实例化,并且正如 DeadMG 指出的那样,您是否想要实例化它。静态类的可控性较差,并且在调用 main 之前实例化。

当单例依赖于在调用 main 之前不可用的其他类或资源时,实例化类的顺序有时可能很关键。

正如您所提到的,如果您从多个线程调用单例,则需要确保使用了线程安全的单例。例如,Scott Meyer(来自Effective C++)的线程就不是安全的。