我认为单例是一种设计模式(好和坏) 单例的问题不在于模式,而在于用户(对不起大家)。每个人和他们的父亲都认为他们可以正确地实施一个(从我所做的许多采访来看,大多数人都不能)。也因为每个人都认为他们可以实现一个正确的单例,他们滥用模式,并在不合适的情况下使用它(用单例替换全局变量!)
所以需要回答的主要问题是:
我对本文的希望是,我们可以在一个地方(而不是谷歌和搜索多个站点)收集何时(以及如何)正确使用Singleton的权威来源。同样合适的是一个反用法和常见的坏实现的列表,解释为什么他们不能工作,对于好的实现他们的弱点
那么开始吧:
我会举起我的手,说这是我用的,但可能有问题
我喜欢“Scott Myers”在他的书“Effective c++”中对这个主题的处理
使用单例的好情况(不多):
- 日志框架
- 线程回收池
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
< p > OK。让我们把一些批评和其他实现放在一起
: -) < / p >