单例设计模式表示我们应该在“单实例”类中定义私有静态属性 . 但是,没有正确的解释为什么数据成员必须是私有静态 . 如果数据成员只是私有,会有什么不同吗?
在以下代码中:
class Singleton
{
public:
static Singleton* getInstance();
private:
Singleton(){/*Private constructor*/}
~Singleton(){/*Private destructor*/}
static Singleton * instance; //Why static is required?
};
如果数据成员 instance
不是静态的,它会有什么不同吗?
EDIT: 通过将析构函数公开,它会改变单例设计的属性吗?
2 回答
静态意味着它是类的一部分,该类的所有对象(实例)将指向同一个实例 .
“getInstance”是一种静态方法,只能访问静态对象 . 如果“instance”不是静态的,不是“类”的一部分,那么“getInstance”不能返回实例 .
尝试使用声明为非静态的实例运行以下代码:
要使一个类成为单例,您应该禁止用户从中创建对象 . 因此,您将构造函数设置为private,并且还会阻止复制构造函数和赋值运算符 .
然后获取实例的唯一方法是使用类的一些静态函数,静态函数只能访问静态变量 . 这就是为什么实例变量总是静态变量 .
getInstance的另一个替代方案是