我正在审查一段使用大量单例类和访问的现有代码.我正在尝试提高此代码的性能.
想到的一件事是优化Singleton :: getInstance()代码片段.
而不是使用Singleton :: getInstance(),我倾向于用两个调用的结构替换它.
一个.一个可以创建和准备单例实例的函数,如Singleton :: prepareInstance(),它将在子系统的开头被调用一次.湾 getInstance()的内联实现,只返回引用而不检查它是否有效.
这是可行的解决方案吗?有什么方法可以改进吗?
我当前的Singleton :: getInstance()代码看起来像这样
Singleton * Singleton::getInstance() {
if(m_instance == NULL) {
m_instance = new Singleton();
}
return m_instance;
}
Run Code Online (Sandbox Code Playgroud)
πάνταῥεῖ提到的方法是否更快?
正确实施不Singleton::getInstance()应该有任何性能问题.当然第一次调用可能代价很高(对于单例实例的初始设置),但任何后续调用应该只返回应该超快的实例.
湾 getInstance()的内联实现,只返回引用而不检查它是否有效.
在我看来,这违背了单身人士模式的一个基本概念.Singleton::getInstance()应该总是返回一个有效的实例.
湾 getInstance()的内联实现,只返回引用而不检查它是否有效.
为什么需要检查有效性?我的单例GetInstance()实现通常如下所示:
Singleton& Singleton::instance() {
static Singleton theInstance;
return theInstance;
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这些代码是否会对性能产生任何影响,也没有必要检查任何有效性.