Шаблон Singleton обычно включает в себя непубличный конструктор по двум причинам.Конструктор должен существовать, потому что, если конструктора нет вообще, включается общедоступный конструктор по умолчанию.Если у вас есть публичный конструктор, однако, люди могут просто создавать свои собственные синглеты по желанию (что неизбежно будет, что означает, что их может быть больше одного).
Это не обязательно должно быть частным.На самом деле, как я слышал, шаблон Singleton, как указано в GoF, по какой-то странной причине упоминает конструктор защищенный .Я слышал кое-что о наследовании, но синглтоны и наследование все равно не очень хорошо сочетаются друг с другом.
Возможно даже иметь открытый конструктор, если он может определять, существует ли экземпляр и генерирует ли исключениеили что-то, если это так.Этого было бы достаточно, чтобы гарантировать единство.Но это довольно редко, потому что это усложняет ситуацию, предоставляя два очевидных способа получения экземпляра, только один из которых действительно будет работать.Если вы не хотите, чтобы внешний код мог создавать второй экземпляр, почему конструктор должен быть частью открытого интерфейса?