Я обычно привык реализовывать одноэлементный шаблон таким образом, потому что это так просто:
class MyClass
{
public:
MyClass* GetInstance()
{
static MyClass instance;
return &instance;
}
private:
//Disallow copy construction, copy assignment, and external
//default construction.
};
Это кажется значительно проще, чем создание статического указателя экземпляра, инициализируя его в исходном файле и используя динамическое выделение памяти в функции экземпляра с охранниками.
Есть ли обратная сторона, которую я не вижу? Для меня это выглядит потокобезопасным, потому что я думаю, что первый поток, который попадет в первую строку, вызовет создание экземпляра - и это кажется красивым и кратким. Я полагаю, что должна быть проблема, которую я не вижу, поскольку это не распространено - я хотел бы получить некоторые отзывы, прежде чем продолжать использовать его