单一州阶级的通常模式类似。
static Foo &getInst()
{
static Foo *inst = NULL;
if(inst == NULL)
inst = new Foo(...);
return *inst;
}
然而,我的理解是,这一解决办法并非read。 (1) 可能不止一次地叫Foo 构造者(可能或可能无关紧要),在Foo 构造返回不同的深层之前,可能无法完全建造。
一种解决办法是,围绕整个方法进行权衡,但在我实际需要很长时间后,我支付同步管理费。 另一种选择类似
static Foo &getInst()
{
static Foo *inst = NULL;
if(inst == NULL)
{
pthread_mutex_lock(&mutex);
if(inst == NULL)
inst = new Foo(...);
pthread_mutex_unlock(&mutex);
}
return *inst;
}
我是否知道这样做的正确方式,或是否有任何陷阱? 例如,是否存在任何可能出现的任何静态初始化令问题,即最经常保证是民族解放军首次出现。 什么时候?