0
点赞
收藏
分享

微信扫一扫

[modern c++] c++ 11单例模式的创建


c++ 11之前无法保证static 变量线程安全,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);
}

 

举报

相关推荐

C++单例模式

【C++ 单例模式】

【C++】单例模式

单例模式(C++)

C++类 单例模式

0 条评论