线程安全的 Singeton

Version >= C++ 11

C++ 11 标准保证了函数作用域对象的初始化以同步方式初始化。这可用于实现具有延迟初始化的线程安全单例。

class Foo
{
public:
    static Foo& instance()
    {
        static Foo inst;
        return inst;
    }        
private:
    Foo() {}
    Foo(const Foo&) = delete;
    Foo& operator =(const Foo&) = delete;
};