我正在浏览一些随机代码,我发现了一些令人困惑的方法,该类是单例,
class CFoo
{
CFoo* _instance;
CFoo(){};
public:
~CFoo(){};
static CFoo* getInstance()
{
if(!_instance)
_instance = new CFoo;
return _instance;
}
static void deleteInstance()
{
if(_instance)
delete _instance;
}
// just ordinary member method.
void FooMethod()
{
CFoo::getInstance()->BarMethod(); //confusing..
}
// just ordinary member method.
void BarMethod()
{
//code here..
}
};
CFoo* CFoo::_instance = NULL;
为什么FooMethod必须调用CFoo :: getInstance()来调用BarMethod?为什么不直接调用BarMethod()?
请告知。
答案 0 :(得分:0)
如果您在CFoo::getInstance()->BarMethod()
内拨打CFoo::FooMethod()
,则this
中的BarMethod
关键字会引用CFoo::_instance
。
如果您在BarMethod()
内拨打CFoo::FooMethod()
,则this
中的BarMethod
关键字会引用调用FooMethod()
的同一对象。
目前尚不完全清楚是否存在任何差异。一方面,您实现的唯一构造函数是private,您将该类称为 Singleton 。这支持只有CFoo
的一个实例存在的事实,即this == CFoo::_instance
应始终保持在BarMethod
内。另一方面,CFoo
有一个公共副本构造函数,因此this == CFoo::_instance
中的BarMethod
可能并非总是如此。
答案 1 :(得分:0)
如果您可以创建此类的对象,则可以直接调用FooMethod
和Barmethod
。问题是你不能这样做,因为construtor是私人的。您可以使用getInstance
方法创建实例的唯一方法。并且该方法确保它只有这个类的单个对象。
这就是为什么它叫单身。