您的位置:首页 > 编程语言 > C语言/C++

单例模式例子

2014-03-01 17:24 260 查看
c11.cc
#include "c11.h"
#include <stdio.h>

int main() {
printf("singleton:\n");
Singleton* s1 = Singleton::getInstance();
printf("%d\n", s1->tag);
s1->tag++;
Singleton& s2 = *(Singleton::getInstance());
printf("%d\n", s2.tag);

printf("nonSingleton:\n");
NonSingleton* ns1 = new NonSingleton;
printf("%d\n", ns1->tag);
ns1->tag++;
NonSingleton* ns2 = new NonSingleton;
printf("%d\n", ns2->tag);

return 0;
}
c11.h
#include <stdlib.h>

class Singleton {
private:
Singleton():tag(0) {};
~Singleton() {};
Singleton(Singleton const&) = delete; // 必需
Singleton& operator=(Singleton const&) = delete; // 必需
public:
int tag;
static Singleton* getInstance() {
static Singleton uniqueSingleton;
return &uniqueSingleton;
};
};

class NonSingleton {
public:
int tag;
NonSingleton():tag(0) {}
};

根据c++11规范,这种实现是线程安全的.

参考:

Is Meyers implementation of Singleton pattern thread safe?

How is Meyers' implementation of a Singleton actually a Singleton
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息