c++11 std::call_once寫單列模式

#include <iostream>
#include <memory>
#include <mutex>

class Singleton {
public:
    static Singleton& GetInstance() {
        //c++11保證唯一性
        static std::once_flag flag;
        std::call_once(flag, []() {
            instance_.reset(new Singleton);
            });

        return *instance_.get();
    }

    ~Singleton()
    {
        std::cout << "~Singleton()" << std::endl;
    }

    void PrintAddress() const {
        std::cout << this << std::endl;
    }

private:
    Singleton() = default;

    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

private:
    static std::unique_ptr<Singleton> instance_;
};

std::unique_ptr<Singleton>Singleton::instance_;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章