首页 > 解决方案 > 直接设置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);
}

标签: c++design-patternsarchitecturesingleton

解决方案


单例可以定义为:

Singleton 是一种创建型设计模式,可让您确保一个类只有一个实例,同时提供对该实例的全局访问点。 重构大师

它定义了类的实例化,而不是用法。因此,从技术上讲,访问和修改值是可以的。

这并不一定是一种好的做法,即如果您的实例用于多线程环境怎么办?你如何控制值的原子性?

一旦您考虑了这些问题,请考虑使用访问器方法或运算符而不是直接访问,这样您就可以控制值的设置方式并对更改做出反应。


推荐阅读