c++ - 直接设置Singleton Class的成员变量是否有效?
问题描述
我想知道以下代码是否有效。
在 main 函数中,将设置 'testClass' 上的成员的 'testValue'。如果通过调用 'showTestValue()' 方法打印,必须更新变量吗?或者在某些情况下变量可能不会更新?
#include <stdio.h>
#include <stdlib.h>
class testClass {
public:
int testValue;
static testClass* getInstance();
void showTestValue();
private:
testClass();
};
testClass*
testClass::getInstance()
{
static testClass ins;
return &ins;
}
testClass::testClass()
{
testValue = 55;
}
void
testClass::showTestValue()
{
printf("testVal is :%d\n", this->testValue);
}
int main(void)
{
for(int i = 0; i < 100; ++i)
{
testClass::getInstance()->testValue = i;
testClass::getInstance()->showTestValue();
}
exit(13);
}
解决方案
单例可以定义为:
Singleton 是一种创建型设计模式,可让您确保一个类只有一个实例,同时提供对该实例的全局访问点。 重构大师
它定义了类的实例化,而不是用法。因此,从技术上讲,访问和修改值是可以的。
这并不一定是一种好的做法,即如果您的实例用于多线程环境怎么办?你如何控制值的原子性?
一旦您考虑了这些问题,请考虑使用访问器方法或运算符而不是直接访问,这样您就可以控制值的设置方式并对更改做出反应。
推荐阅读
- css - 如何在其jspui版本上将DSpace中发现(搜索结果)页面中侧边栏的默认位置从右侧更改为左侧?
- javascript - 如何将对象数组转换为表单数据?
- microstrategy - 订单日期之间的时间
- python-3.6 - 使用 python youtube_dl 将数据直接下载到临时文件中
- ada - 元素太多的数组只有编译器警告?
- javascript - 如何从 Firebase Firestore 分离 onSnapshot 侦听器
- reporting-services - 如何从字符串中删除特定字符,在字符串中间
- gpflow - 我可以为 GPflow 中的不同数据类型指定不同的内核吗?
- stata - Stata ANOVA:因子变量可能不包含非整数值
- python - 如何将 WIQL 查询输出转换为结构化数据框?