C++ 两种单例设计模式

2022-02-11 08:36:47 浏览数 (1)

普通单例设计

代码语言:javascript复制
class Singleton
{
   public:
       static Singleton* getInstance()
	   {
		   static Singleton instance;
		   return &instance;
	   }
       ~Singleton( );
   private:
       Singleton( );
};

上面的代码主要涉及到内存分配及析构、线程安全等等,但是设计不够完美。

进阶单例设计(推荐)

下面的代码基于 C 11

代码语言:javascript复制
class Singleton
{
    public:
        static Singleton& getInstance()
        {
            static Singleton instance; // C  11 保证这是线程安全的
            return instance;
        }

    private:
        Singleton() {}

    public:
        Singleton(Singleton const&)       = delete; // 《Effective Modern C  》提到,用 delete 更有益于编译器的错误提示
        void operator=(Singleton const&)  = delete;
};

0 人点赞