早在第一篇博文中,最后提出一个问题,使用模板来实现单例模式.现给出方法.
singleton.h
#pragma once
#include <memory>
#include <mutex>
template<typename T>
class Singleton {
public:
static std::shared_ptr<T> instance() {
std::call_once(_onceFlag,[](){
_instance = std::shared_ptr<T>(new T());
});
return _instance;
};
protected:
Singleton() {};
~Singleton() {};
private:
Singleton(const Singleton& other);
Singleton &operator=(const Singleton& other);
static std::once_flag _onceFlag;
static std::shared_ptr<T> _instance;
};
template<typename T>
static std::once_flag Singleton<T>::_onceFlag;
template<typename T>
static std::shared_ptr<T> Singleton<T>::_instance;
sample.h
#pragma once
#include "singleton.h"
class Sample : public Singleton<Sample> {
friend class Singleton<Sample>;
public:
~Sample();
private:
Sample();
};
网友评论