Я видел реализации шаблонов Singleton, где переменная экземпляра была объявлена как статическая переменная в методе GetInstance. Вот так:
SomeBaseClass &SomeClass::GetInstance()
{
static SomeClass instance;
return instance;
}
Я вижу следующие положительные стороны этого подхода:
- Код проще, потому что он компилятор, который отвечает за создание этого объекта только при первом вызове GetInstance.
- Код более безопасный, поскольку нет другого способа получить ссылку на экземпляр, но с помощью метода GetInstance, и нет другого способа изменить экземпляр, но внутри метода GetInstance.
Каковы отрицательные стороны этого подхода (за исключением того, что это не очень OOP-ish)? Является ли это потокобезопасным?