关于此问题有两种实现方法:
一个是直接把构造函数声明为私有成员;
class TT
{
private:
TT();
~TT();
public:
static TT getInstance()
{
static TT t;
return t;
}
}
此种方法只有一个实例且不能析构;如果返回TT指针可能造成内存泄露
另外一种方法使用虚继承实现:
class BTT
{
friend class TT;
private:
BTT();
~BTT();
};
class TT :virtual public BTT
{
public:
TT();
~TT();
};
此种方法TT类不能有子类;因为TT是虚继承BTT,如果TT有子类,需要子类直接实现BTT的构造函数;而构造函数是私有,所以不能直接调用;故不能继承。