Да и не синглтон это вовсе
Почему вы так подумали?
Реально потому что "std-дядя так сказал", а мы уже привыкли послушно делать все что дядя скажет (и хвостик подымать на тех кто так не делает
).
Если этот дядя вас будет уговаривать конфетками сесть к нем в машину не соглашайтесь. И тем более хвостик не поднимайте.
Решение 1: почему не просто объявить instance вне метода? Тогда конструктор вызовется до main, никаких проблем с "многопоточностью" нет.
Создание объекта до main не всегда хорошо. Например, перед созданием instance нам нужно выполнить некоторые действия или создать другие объекты, тот-же QApplication.
К тому же, порядок создания глобальных объектов не определен, если при конструировании одного глобального объекта используется другой глобальный объект, может случиться так, что используемый объект еще не будет сконструирован. Не так давно было обсуждение на форуме с такой ситуацией.
Ну и последнее, если instance никому не нужно, то и создаваться оно не должно.
Решение 2: Хорошо, не нравится до main, но что мешает вызвать getInstance() до запуска ниток? Этот момент всегда прекрасно известен и серия действий там всегда есть.
Опять же это предполагает обязательное создание instance, в этом случае можно оформлять синглетон по типу QCoreApplication. Позволит еще и любые параметры в конструктор передавать.
Оба решения не имеют накладных расходов на локи и.т.п.
Они имеют значительно большие накладные расходы в виде самого объекта instance.
Смысл - загадить текст и сделать его недоступным для простых людей.
Простые люди, как правило, не читают программный код, это делаю программисты. Поэтому, нет повода для беспокойства.
А вообще, эту гадость (синглетон) лучше вообще не использовать.