读书人

对单例模板的一个有关问题

发布时间: 2013-02-24 17:58:56 作者: rapoo

对单例模板的一个问题
网上学习了单例模板,做法是声明一个模板类作为基类,其它的需要成为单例的类继承这个基类。举例如下:

//基类
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感觉很轻松一些。

读书人网 >C++

热点推荐