Is it a correct way to make singleton objects by using 2 static atomic and mutex variables to save 2 states: initializing and initialized?
For example, I only need one Application
instance running in a program. Its job is to init and terminate external libraries, and prevent to create any new Application
object.
#include <mutex>
#include <stdexcept>
static bool initialized;
static std::mutex mutex;
Application::Application()
{
std::lock_guard<std::mutex> lock(mutex);
if (initialized) throw std::runtime_error("Application::Application");
if (!init_external_libraries())
throw std::runtime_error("Application::Application");
initialized = true;
}
Application::~Application()
{
terminiate_external_libraries();
initialized = false;
}