Я должен создать простую фабрику одноэлементных объектов для некоторых типов объектов. Проблема в том, что я не могу найти умный способ запретить пользователю создавать экземпляры объектов конструкторами. Я знаю, что могу перемещать конструкторы в закрытый / защищенный раздел, но как теперь фабрика будет создавать новые объекты, когда конструкторы являются частными / защищенными? Делать фабрику другом каждого класса не очень разумно, так как мне нужно предварительно объявить фабрику в каждом заголовке и написать дополнительную «фабрика друга»; в каждом классе. Как это сделать правильно?
В классе добавьте статический член в качестве указателя на тот же тип класса. Это будет твой синглтон.
При инициализации экземпляра конструктор запускается.
Если это первый раз, статический член имеет значение null (никогда не инициализируется), обычно запускайте конструктор и устанавливайте значения по умолчанию. В конце также установите статический член в this
, Теперь ваш синглтон инициализирован.
В последующих вызовах конструктора статический указатель не будет нулевым. Сделайте временный указатель на тип класса. Установите этот указатель на this
затем установите this
статический член и удалите указатель. Это удалит новый экземпляр и будет возвращать один и тот же статический экземпляр каждый раз.
Других решений пока нет …