我是新手,在C ++中有点无知,我遇到使用单例模式的C ++代码,
class CFoo
{
public:
static CFoo& getInstance()
{
static CFoo self;
return self;
}
private:
CFoo(){}
~CFoo(){}
};
我只是为什么要返回静态引用?这是一个有效的代码吗?程序员为什么不使用指针?
答案 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"