首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-02-24 
对单例模板的一个问题网上学习了单例模板,做法是声明一个模板类作为基类,其它的需要成为单例的类继承这个

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

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

热点排行