请教类模板问题 急!

来源:百度知道 编辑:UC知道 时间:2024/05/21 18:34:10
给定类模板Singleton 的定义:
template <class T> class Singleton {
static bool bHasCreated; // 设其初值为false
protected:
static T* pInstance;
Singleton() { /* … … */ } // 问题b
public:
static T& instance() { /* … … */ } // 问题a
T* operator &() { exit (-1); return 0; } // 问题c
};
其设计意图是使继承该模板的所有类(例如下面表示系统时钟的Clock类)均为“独身”模式(仅有一个实例,且只能通过方法
instance() 来产生和获得这个实例):
class Clock: public Singleton<Clock> { /* … */ }; // 范例
a. 试给出方法instance() 的实现(须达到上述关于“独身”模式的设计意图);
b. 类模板中的Constructor 的设计意图是:防止继承该模板的类自行产生实例而绕过了方法instance() 所进行的单一实例控制。
试解释为什么定义了这个Constructor 就能达到这一设计意图,然后给出相应的实现。
c. 对操作符& 进行过载的设计意图是什么?
b问题没给出实现啊 主要就是问这个啊 我就是觉得不需要专门写什么实现过程
c 取地址会出现什么问题?

static Singleton<T>& instance()
{
if (pInstance == null)
{
return new T(); // 构造函数就算是私有,在类内部依然能调用
}
else
{
return pInstance;
// exit(-1);也是可以的,不推荐
}
}

Constructor 为私有,当在类外调用new Singleton<T>()时就会出错,只有用
instance()才能创建实例,保证唯一性。

c:为了防止取地址操作,无论是类内还是外。

D:懂了就快加分,升级,急