单件模式有一种比较常用的实现方法,就是把构造函数声明为私有,然后声明一个友元函数,由该友元函数负责对象的创建,大体如下:
namespace PrintStuff
{
class CPrinter
{
friend CPrinterthePrinter();
private:
CPrinter();
~CPrinter();
};
CPrint thePrinter()
{
static CPrint printer;
return printer;
}
}
这样会出现编译错误,提示对象不能访问类的私有成员,
这是因为printer的构造是在thePrinter函数内,而此函数是CPrinter的友元函数,访问私有变量没有问题,但printer析构的时候已经出了thePrinter函数的范围,就相当于在全局的范围内访问对象的析构函数(此处为私有),就会出现问题,把析构声明为公有就好了。