Правильный ли подход к определению статического объекта внутри функции? - PullRequest
1 голос
/ 05 августа 2011
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 ]

6 голосов
/ 05 августа 2011

Да, это правильный подход, и да, все objXXX будут ссылаться на один и тот же объект. Объект будет построен при первом вызове функции.

3 голосов
/ 05 августа 2011

Да, но остерегайтесь проблем с потоками.Этот код зависит от условий гонки, если вы не вызовете getInstance() до запуска любого другого потока, который вызовет метод.

1 голос
/ 05 августа 2011

Технически, это допустимый C ++, и вы всегда получите один и тот же объект. Он известен как анти-паттерн Singleton и его следует избегать, как чумы, потому что он производит ужасно не поддерживаемое программное обеспечение. Это правильный подход? Определенно нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...