Я реализовал синглтон на основе c++ 11. Однако в некоторых случаях конструктор может вызываться несколько раз.
Класс будет скомпилирован в статический lib и использован другим таким образом lib (более одного, таким образом lib). И система является многопоточной системой (работает на уровне Android HAL)
///Файл .h:
class Logger
{
public:
/// Return the singleton instance of Logger
static Logger& GetInstance() {
static Logger s_loggerSingleton;
return s_loggerSingleton;
}
private:
/// Constructor
Logger();
/// Destructor
~Logger();
}
///.cpp файл
Logger::Logger()
{
ALOGE("OfflineLogger create");
}
Logger::~Logger()
{
}
Он должен быть создан один раз, например:
03-21 01:52:20.785 728 4522 E : OfflineLogger create
Однако я вижу, что он был создан не раз
03-21 01:52:20.785 728 4522 E : OfflineLogger create
03-21 01:52:20.863 728 2274 E : OfflineLogger create
03-21 01:52:20.977 728 2273 E : OfflineLogger create
03-21 01:52:26.370 728 4522 E : OfflineLogger create
Вопросы:
-
Что-то не так с моим синглтон-дизайном? Это потокобезопасная проблема?
-
Похоже, мой синглтон отлично работает в одной области, но каждая такая библиотека, которая включает в себя мой синглтон, создаст свой собственный синглтон, так что мой синглтон больше не будет "быть синглтоном". Является ли проблема, вызванная каждой динамической связью с новым, так что "статическая переменная" становится "локальной статической"? Является ли это возможным? Если так, как это исправить?