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都将引用同一个对象。
答案 0 :(得分:6)
是的,这是一种有效的方法,是的,所有objXXX都会引用同一个对象。该对象将在第一次调用函数时构造。
答案 1 :(得分:3)
是的,但要注意线程问题。如果您在启动任何其他将调用该方法的线程之前未调用getInstance()
,则此代码受竞争条件的限制。
答案 2 :(得分:1)
从技术上讲,这是合法的C ++,你将始终获得相同的对象。它被称为Singleton反模式,应该像瘟疫一样避免,因为它产生了可怕的不可维护的软件。这是正确的方法吗?绝对不是。