Singleton - 受保护与私有构造函数

时间:2011-08-31 11:52:04

标签: c++ design-patterns

在设计单例时,为什么构造函数是protected而不是private?这是基于我在网上看到的内容。

我们希望控制该类的实例数量,这是公平的,但为什么protectedprivate也不会做这个伎俩吗?

3 个答案:

答案 0 :(得分:8)

首先,浩大大多数情况下的单身人士是个坏主意(Why?)。使用它们甚至更少而不是全局变量。

这样,子类可以对Singleton基类进行实例化,并将其作为自身GetInstance() - 类型函数的一部分返回。这就是它在设计模式中完成的原因。因此,如果你计划继承Singleton,它只会真正相关。

GoF说,(第130页,对Singleton类进行子类化);

  

更灵活的方法是使用单例注册表。单例类可以在众所周知的注册表中按名称注册其单例实例,而不是让Instance定义可能的单例类集。

在使用单例注册表时,仍然需要基础Singleton中的protected构造函数(根据给定的实现)

总之;如果您计划继承Singleton,请将其设为protected。否则,请使用private

答案 1 :(得分:4)

使用单身人士很糟糕。周期。

那就是说,构造函数可以是私有的,没问题。但是如果你想从你的单身人士中衍生另一个单身人士(好像有一个单身人士还不够糟糕)怎么办?在这种情况下,派生类需要访问基本单例构造函数。

答案 2 :(得分:0)

这都是关于继承的。 class lazy_singleton: public singleton {};  将是与singleton构造函数相同的单例