静态去初始化 - 安全单例

有时会有多个静态对象,你需要能够保证在使用单例的所有静态对象不再需要它之前不会销毁单例

在这种情况下,即使在程序结束时调用静态析构函数,std::shared_ptr 也可用于为所有用户保持单例存活:

class Singleton
{
public:
    Singleton(Singleton const&) = delete;
    Singleton& operator=(Singleton const&) = delete;

    static std::shared_ptr<Singleton> instance()
    {
        static std::shared_ptr<Singleton> s{new Singleton};
        return s;
    }

private:
    Singleton() {}
};

注意: 此示例在此处的问答部分中显示为答案。