c++ - 单例初始化

标签 c++ singleton private-members

我实现了 Singleton design pattern在我的代码中。

假设是:

class Singleton
{
  Singleton () {}
  static Singleton* s;
public:
  static Singleton* Get () {
    if (!s)
      s = new Singleton ();
    return s;
  }
};

令我困惑的是这种模式的“初始化”。 在 .cpp 中,我输入:

SingletonPointer* SingletonClass::s (0);

但我不明白如何访问定义s,因为它是private。 这怎么可能?

TIA, 吉尔

最佳答案

使用单例模式的最佳方式是完全不使用它。

单例为什么不好的简要总结:

  1. 它们是具有特殊限制的全局变量。出于自己的原因,全局变量已经够糟糕了;让他们成为单例只会放大坏处。
  2. 如果您真的只需要一个对象的一个​​实例,那么就创建一个。如果您需要一种特殊的设备来确保您不会制造超过一个,那么您的代码的语义就有问题了。将其设为单例并不能解决问题,它只会用新问题掩盖它。
  3. 单例不适合线程。线程已经够硬了。不要让它们变得更难。

使用单例不会解决任何问题。它只是将错误的语义应用于现有代码,使该代码的 future 扩展变得困难或不可能(如果你明天需要两个怎么办?),并增加了新问题。长话短说,就是不要使用它们。

关于c++ - 单例初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636334/

相关文章:

c++ - 将文本文件内容放入二维数组

c++ - cv::merge 没有匹配函数

c++ - Qt 自定义委托(delegate)

c# - 如何在C#中实现单例?

python - 私有(private)名称修改有什么好处?

c++ - 派生类如何使用基类的 protected 成员?

unit-testing - F# 中的单元测试私有(private)方法

c++ - 计算一个int在一个文件中出现的次数

java - 如何在 Java 中的自定义 JFrame 中附加 JFileChooser 按钮的处理程序

ios - 编码和解码自定义对象