C ++ Singleton Vs静态方法

时间:2010-11-28 22:04:02

标签: c++ methods static singleton

  

可能重复:
  C++ singleton vs completely static object

您好,

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

    MoneyPrinter::addJob(PrinterJob &job);
or
    MoneyPrinter::getInstance().addJob(PrinterJob &job);

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

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

4 个答案:

答案 0 :(得分:5)

  

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

单身人士可以拥有内部状态(在您的示例中,是已添加的职位列表),即单身人士类的成员数据。

  

你用什么?为什么呢?

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

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

答案 1 :(得分:3)

单身人士的一般规则是,如果你不得不问,不要使用它。对于任何全局可变状态都是如此。

答案 2 :(得分:2)

如果使用静态成员函数,仅仅因为使用了语法而难以重构Singleton-ness。有一个原因。

答案 3 :(得分:2)

单例可让您控制 实例化类时,以及DeadMG指出如果要实例化它。静态类不太可控,并且在调用main之前实例化。

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

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