设计模式单例模式#include iostream #includemutex class MyCAS { private: MyCAS() {}; MyCAS(const MyCAS*) delete; MyCAS operator(const MyCAS*) delete; private: static MyCAS* m_instance; static std::mutex m_mutex; public: static MyCAS* GetInstance() { if (m_instance nullptr) { std::lock_guardstd::mutex lock(m_mutex); if (m_instance nullptr) { m_instance new MyCAS(); static CGarhuishou cl; } } return m_instance; }; class CGarhuishou { public: ~CGarhuishou() { if (MyCAS::m_instance) { delete MyCAS::m_instance; MyCAS::m_instance nullptr; } } }; void func() { std::cout 测试 std::endl; } }; MyCAS* MyCAS::m_instance nullptr; std::mutex MyCAS::m_mutex;使用std::once_flag 作为一个标记std::call_once通过这个标记来决定对应传入的函数是否执行调用call_once成功后call_once会反转这个标记这样再次调用这个call_once后传入的函数就不会再次被执行了#include iostream #includemutex class MyCAS { private: MyCAS() {}; MyCAS(const MyCAS*) delete; MyCAS operator(const MyCAS*) delete; private: static MyCAS* m_instance; static std::once_flag m_flag; public: static void CreateInstance() { m_instance new MyCAS(); static CGarhuishou cl; } static MyCAS* GetInstance() { std::call_once(m_flag, CreateInstance); return m_instance; }; class CGarhuishou { public: ~CGarhuishou() { if (MyCAS::m_instance) { delete MyCAS::m_instance; MyCAS::m_instance nullptr; } } }; void func() { std::cout 测试 std::endl; } }; MyCAS* MyCAS::m_instance nullptr; std::once_flag MyCAS::m_flag;