有关单例模式的疑惑
来源:9-3 static和单例模式的实现
Edot
2023-06-29
老师好!在学习过本节课程后,我有一些思考以及疑惑。
疑惑一:为何必须在全局范围内声明静态非常量属性,而在声明之前GetInstance()函数不能使用它,即便是加上域运算符::也依然不能使用?
思考:在C++中,声明、定义、初始化是三个不同的概念,声明是定义的前提,定义是使用(包括初始化)的前提;对于静态非常量属性,声明与定义是分离的(类似于C语言中用extern修饰的变量),而这种现象并不常见(通常,我们在全局范围或者函数作用域内声明一个整形变量,即便不对它进行赋值,它也依然完成了定义操作,能够被使用,即声明包含了定义过程)。
疑惑二:假如GetInstance返回的类型是const类型,那么单例模式下,属性该如何更改?
思考:或许需要有一种方法,获得非const类型的对象,否则其内部属性将永远无法更改。
请老师进行批评指正。
写回答
1回答
-
quickzhao
2023-06-30
问题一静态非常量属性的声明和定义在类的内部是不够的,因为在类内部只是定义了该属性的存在,并没有为其分配内存空间。将静态非常量属性的声明放在全局范围内,使得该属性可以在整个程序中可见。这样一来,在单例模式中,通过定义一个静态成员变量来表示单例实例,可以保证该实例的唯一性。全局范围的声明确保了该静态成员变量在整个程序中只有一个实例,并且可以在需要的地方进行访问。
问题二只需要在非const方法里面更改其属性就可以了,当获取单例后调用非const方法就可以。
022023-06-30
相似问题