编辑:从另一个问题,我提供了一个答案,其中包含很多关于单身人士的问题/答案的链接:关于单身人士的更多信息:
所以我读过单例:好的设计还是拐杖?
争论仍在继续。
我将单例视为一种设计模式(好的和坏的)。
Singleton 的问题不在于模式,而在于用户(对不起大家)。每个人和他们的父亲都认为他们可以正确地实施一项(根据我所做的许多采访,大多数人都不能)。同样因为每个人都认为他们可以实现正确的单例,所以他们滥用模式并在不合适的情况下使用它(用单例替换全局变量!)。
因此,需要回答的主要问题是:
- 什么时候应该使用单例
- 如何正确实现单例
我对这篇文章的希望是,我们可以在一个地方(而不是必须谷歌和搜索多个站点)收集何时(以及如何)正确使用 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;
}
};
好的。让我们一起得到一些批评和其他实现。
:-)