天天看點

[modern c++] c++ 11單例模式的建立

主體思想:

class my_class;
my_class& get_my_class_instance()
{
  static my_class instance;
  return instance;
}      

完整代碼:

#include <iostream>
#include <Windows.h>

using namespace std;

class A {
private:
  A() {
    //因為其他構造被顯式禁用了,是以編譯器不再自動生成預設構造,需要顯式指定
  }
  ~A() {

  }
  A(const A& a) = delete;         //禁用拷貝構造,如果沒有,則可能發生A aaa(aa);,進而導緻多個執行個體存在,加上以後A aaa(aa);會在編譯時報錯
  A& operator=(const A& a) = delete;    //禁用拷貝指派,如果沒有,則可能發生A aaa = aa;,進而導緻多個執行個體存在,加上以後A aaa = aa;會在編譯時報錯
  A(const A&& a) = delete;        //禁用移動構造,如果沒有,則可能發生A aaa = std::move(aa);,進而導緻多個執行個體存在,加上以後A aaa = std::move(aa);會在編譯時報錯
  A& operator=(const A&& a) = delete;   //禁用移動指派,如果沒有,則可能發生A aaa(std::move(aa));,進而導緻多個執行個體存在,加上以後A aaa(std::move(aa));會在編譯時報錯
public:
  static A& getA() {
    static A a;
    return a;
  }
};

int main()
{
  A& aa = A::getA();
  //A aaa = aa;
  //A aaa(aa);
  //A aaa = std::move(aa);
  //A aaa(std::move(aa));
  std::cout << "Hello World!\n";
  while (1) Sleep(1000);
}      

繼續閱讀