singleton.h
文件
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
class Singleton
{
public:
static Singleton* get_instance()
{
if(!_instance)
return new Singleton();
return _instance;
}
~Singleton()
{
delete _instance;
}
int test() const
{
return _test;
}
private:
//防止被用户调用
Singleton():_test(1) {}
private:
static Singleton* _instance;
int _test;
};
#endif
main.cpp
文件
#include <iostream>
#include "singleton.h"
using namespace std;
Singleton* Singleton::_instance = nullptr;
int main(int argc, char *argv[])
{
Singleton *sin1 = Singleton::get_instance();
Singleton *sin2 = Singleton::get_instance();
cout << sin1->test() << endl;
cout << sin2->test() << endl;
return 0;
}
这种写法只能用于单线程环境下,如果在多线程环境下,有两个线程同时执行到get_instance()
时,将会产生两个实例。