单身人士滥用?

时间:2013-05-25 21:24:03

标签: c++ singleton

我有一些像资源经理一样的经理,他是单身人士。有些对象需要调用此管理器的方法。这种习惯会闻到床吗?

some object logic: ResourceManager::init()->callMethod();

我们没有使用对单例的引用,我们在运行时获取它。适合吗?

2 个答案:

答案 0 :(得分:2)

单身人士模式有其优点和缺点,但如果你正在使用它,那么你所写的并不是太糟糕。

但是我强烈建议将init()重命名为getInstance(),如果那是函数返回的话。

就你的使用而言,写作中唯一真正的负面影响

a::getInstance()->foo();
a::getInstance()->bar();

而不是

a* thing = a::getInstance();
thing->foo();
thing->bar();
如果没有内联getInstance()函数,

将是潜在的额外函数调用开销。

一般来说,如果你要在单个函数中多次使用相同的单例,那么调用getInstance()一次会好一些,但最终我认为它更像是一个编码风格问题。真实的表现问题。

答案 1 :(得分:0)

使用单身人士的健康方式非常简单:

class ResourceManager {...}; //正常实现类

的ResourceManager&安培; GetResMan(){...} //传唤和返回实例的全局访问点,可能是本地静态,文件名范围内的静态,甚至可能使用角落情况的其他创建技巧

记录它作为提供单身的东西。

GetResMan()DoStuff(); //客户端网站的使用

从这里看它的好坏取决于应用程序的逻辑/设计是否真的意味着为该经理设置一个单身人士 - 如果你是积极的,你可以放心地忽略抨击活动。

精炼版本可以有两个访问函数,主流返回const ref,这样你就可以轻松告诉其余的变异客户端调用。但这取决于类的性质及其用例。