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

时间:2011-08-05 16:28:08

标签: c++ singleton

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都将引用同一个对象。

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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