对单例模板的一个问题
网上学习了单例模板,做法是声明一个模板类作为基类,其它的需要成为单例的类继承这个基类。举例如下:
//基类
template<class T>
class Singleton //单例模板
{
public:
static T* GetInstance()
{
static T instance;
return &instance;
}
protected:
Singleton(){}
};
//派生类
class A : public Singleton<A>
{
public:
A(){}
}
但是这样有一个问题,就是类A的构造函数必须是public的,这样不就不符合单例模式了吗?
特来请教各位高手。
[解决办法]
可以
private:
A(){}
friend Singleton<A>;
[解决办法]
++
真知灼见!
第二个网上大多用C++实现singleton的例子都有两个问题:
1. getInstance方法线程不安全。
2. 内存管理,只有new没有delete。当然实际工作中,这个问题还不算大,因为Singleton只有一个实例,但是从技术的角度来说,这是不太完整的实现。(Java和C#都是garbage collection,所以它们不需要考虑这个问题)
参考:
C++实现Singleton模式
你就会发现在C++中要实现严格的Singleton模式,还是很需要费一番功夫的,远比用Java和C#难得多。
至于其他的模式,用C++实现起来反而比实现Singleton感觉很轻松一些。