有人能解释一下这段代码吗?
class S
{
public:
static S& getInstance()
{
static S instance;
return instance;
}
private:
S() {}
S(S const&); // Don't Implement.
void operator=(S const&); // Don't implement
};
我的理解是: getInstance是一个静态方法,它将返回对实例的引用,但是这个实例在哪里创建?我没有看到任何新的S();所以..
答案 0 :(得分:1)
具有静态存储持续时间的块范围实体(在您的情况下为static S instance;
)在控件第一次通过其声明时初始化。在C ++ 11之前,这不是线程安全的(但是,某些编译器确实提供了强制执行线程安全的选项)。至于C ++ 11,标准规定“如果控件在初始化变量时同时进入声明,则并发执行应等待初始化完成。”