C ++中的单例模式

时间:2010-11-03 03:56:23

标签: c++ pointers static singleton

我是新手,在C ++中有点无知,我遇到使用单例模式的C ++代码,

class CFoo
{
 public:
   static CFoo& getInstance()
   {
     static CFoo self;
     return self;
   }

 private:
   CFoo(){}
   ~CFoo(){}
};

我只是为什么要返回静态引用?这是一个有效的代码吗?程序员为什么不使用指针?

3 个答案:

答案 0 :(得分:7)

为什么要使用指针?引用很简单并且匹配我想要做的事:别名对象,而不是指向它。 static不适用于引用,它适用于函数,使其在没有实例的情况下可调用。

(更好的是,why use a singleton?)

答案 1 :(得分:2)

静态局部变量,例如除非明确删除,否则self一旦初始化(第一次通过函数getInstance)将保留整个程序的持续时间。因此,将引用返回self非常安全。

请注意,它是getInstance,它在函数声明中是静态的。函数的返回类型不允许使用存储类说明符。

我建议您使用Monostate design pattern,除非强烈建议使用Singleton

答案 2 :(得分:1)

如果使用指针,则必须取消引用指针才能使用CFoo实现的任何重载运算符。如果它返回一个指针,代码可能如下所示:

(*(CFoo::getInstance ())) == "comparison overloaded op"

VS

CFoo::getInstance () == "comparison overloaded op"