在函数内部定义静态对象是正确的方法吗?

Is it right approach to define a static object inside a function?

本文关键字:方法 内部 函数 定义 静态 对象      更新时间:2023-10-16
class MyClass {
public:
    static MyClass& getInstance() {
        static MyClass obj;
        return obj;
    }
};

int main()
{
    MyClass& obj1 = MyClass::getInstance();
    MyClass& obj2 = MyClass::getInstance();
        |
        |
    MyClass& obj1000 = MyClass::getInstance();  
}

如果多次调用getInstance()函数,它是否总是返回相同的对象和所有obj1, obj2…Obj1000将引用相同的对象

是的,这是一个有效的方法,是的,所有objXXX将引用相同的对象。该对象将在函数第一次被调用时被构造。

可以,但是要注意线程问题。如果您在启动任何其他将调用该方法的线程之前没有调用getInstance(),则此代码将受竞争条件的约束。

从技术上讲,这是合法的c++,您将始终获得相同的对象。它被称为单例反模式,应该像避免瘟疫一样避免,因为它会产生可怕的不可维护的软件。这是正确的方法吗?