主體思想:
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);
}