getinstance() 在单例中到底做了什么
What exactly does getinstance() do in a singleton?
我遇到了单例模式。我无法理解两者之间的区别
singletonobj.getinstance().dosomething() //1st one
和
singletonobj.dosomething() //2nd one
getinstance()
做什么,在第二种情况下没有这样做?
嗯,从技术上讲,singletonobj.getinstance()
是多余的,因为这意味着你已经掌握了对象。
调用通常如下所示:
SingletonClass::getinstance().dosomething();
或
singletonobj.dosomething()
如果您预取了对象 - 即以前这样做
SingletonClass& singletonobj = SingletonClass::getinstance();
首先,singletonobj
是一个错误/令人困惑的名称。单例按类调用,例如:
Log::getInstance().doSomething();
而不是
Log log = new Log;
log.getInstance().doSomething();
所以这应该回答这个问题,但无论如何我都会详细说明:)
Log::doSomething();
将强制doSomething()
为静态方法,而
Log::getInstance().doSomething();
具有doSomething()
作为实例方法。
为什么要使用getInstance()
?因为根据其定义,单例应该只有零个或一个实例。通过将单一实例的构造函数设为私有并发布 getInstance()
方法,它允许您控制此类的实例数。私有构造函数只是为了避免其他类实例化这个类,这将破坏这个类作为一个单一实例的目的,因为你无法控制这个类有多少个实例。
class SingletonExample {
private:
static SingletonExample* instance = NULL;
SingletonExample() { }
public:
static SingletonExample getInstance() {
if (instance == NULL) {
instance = new SingletonExample;
}
return *instance;
}
void doSomething() {
// Do something :)
}
}
看起来第一个示例正在调用常规方法,而第二个示例正在调用静态方法。
单一实例设计模式可确保在任何给定时间仅实例化给定对象的单个实例。 第一个示例返回所述实例,然后使用对象的实例调用方法。
第二个示例似乎使用了一个静态方法,该方法不需要对象的实例,并且实际上使单例设计模式无效......
相关文章:
- 为什么在单例中,检查类==空?
- 在类中存储单例的指针
- C++中的单例实现在调用 getInstance 函数时不会产生相同的类实例
- 在这种单例实施中,是否可以对两个商店重新排序?
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- 如何在单例类中管理变量状态?
- 基于 IOKit 的 kext 驱动程序中的单例类
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- C++在单例类中创建类实例时遇到困难
- 如何调用单例中的Overriden功能
- 单例中未解决的外部符号
- 单例中的所有内容都是静态的吗
- getinstance() 在单例中到底做了什么
- 此单例对象创建代码中的错误是什么
- 单例中的构造函数重载不起作用
- 用c++从QML单例中读取属性
- 为什么要在单例中删除move构造函数和move赋值操作符?
- 在c++中什么时候应该使用单例类?
- C++内联在一个单例中被忽略,并显示在我的探查器中.怎么会
- 设计模式——在c++中,当实现(一组单例)直接从它们的编译单元在某个注册表中自注册时,它被称为什么?