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