靜態去初始化 - 安全單例

有時會有多個靜態物件,你需要能夠保證在使用單例的所有靜態物件不再需要它之前不會銷燬單例

在這種情況下,即使在程式結束時呼叫靜態解構函式,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() {}
};

注意: 此示例在此處的問答部分中顯示為答案。