Многопоточный Singleton с ленивой инициализацией:
c
Этот подход использует "волшебную" статическую переменную (Meyers' Singleton), которая гарантированно инициализируется при первом вызове функции getInstance() и потокобезопасна начиная с C++11. Это устраняет необходимость в явной синхронизации с мьютексами для инициализации.
Альтернативный подход (для старых стандартов C++ или явного контроля инициализации) с использованием мьютекса:
c
Этот вариант требует явного управления временем жизни экземпляра (destroyInstance()) и более сложен с точки зрения обеспечения корректности в многопоточной среде (необходима двойная блокировка проверки с правильными моделями памяти). В большинстве современных C++ сценариев предпочтителен первый подход.