最近我遇到了一个问题,设计完美的单音模式。 我通过使用一个静态实例设计,一个静态函数返回该实例,如下所示。
ST* ST::instance = NULL;
ST* ST::getInstance()
{
mutex.lock();
if(!instance)
instance = new ST();
mutex.lock();
return instance ;
}
他让我在不使用互斥锁的情况下编写(在不使用任何同步机制的情况下编写完美的单例),然后我改变如下。
ST* ST::instance = new ST();
ST* ST::getInstance()
{
return instance ;
}
这是一个完美的设计吗?他对单色调图案的完美设计意味着什么? 他对设计的期望是什么?
提前致谢。
答案 0 :(得分:1)
没有完美的单身人士。事实上,对于是否有任何单身人士有任何价值,我们可以接受一些问题。
那就是说,在C ++中,Meyers Singleton通常是最不成问题的。它的核心看起来大致如下:
static T &get_instance() {
static T t;
return t;
}
因此,基本思想是将目标类型的单个实例定义为静态成员函数的本地实例。该静态成员函数返回对该对象的引用。所有singleton
的构造函数都是私有的,因此只有成员函数才能使用它们来创建(或销毁)该类的对象。实际上,这意味着只有一个静态成员函数可以创建一个实例,并且它只创建一个静态实例,因此所有使用都是该实例。
当然,如果你想要足够严重,你可以返回指针而不是引用,但这很少是一个好主意(可能不是&#34的好候选人;完美"。)