Что заставляет вас думать, что так и должно быть?Как насчет обычного нестатического класса, который может быть создан по требованию?А затем сделать один статический экземпляр его доступным в качестве регистратора по умолчанию.Таким образом, вы получаете лучшее из обоих миров: удобный глобальный доступ к логгеру и , возможность протестировать его или временно использовать другой регистратор.
Другое предложение - просто создать один экземпляри передайте его в качестве параметра каждому компоненту вашего класса, как предполагает @disown.
Но если вы делаете класс статичным или одиночным, вы просто стреляете себе в ногу.
Edit
Пример, в ответ на @Комментарий Стивена:
// define a logger class, a perfectly ordinary class, not a singleton, and without all static members
class Logger {
// ....
};
// create a single global *instance* of this class
Logger defaultLog;
void foo() {
// and now use the globally visible instance
defaultLog.Log("hello");
// or create a new one if that's what we need:
Logger newlog;
newlog.Log("hello");
}
Там нет магии.Это именно то, что делает стандартная библиотека.std::cout
не одиночка.Это просто глобальный экземпляр класса std::ostream
, класса, который также может быть создан обычным образом, если и когда вам это нужно.