C ++ не позволяет пользователю создавать экземпляры объектов - PullRequest
0 голосов
/ 19 мая 2018

Мне нужно создать простую фабрику одноэлементных объектов для некоторых типов объектов.Проблема в том, что я не могу найти умный способ запретить пользователю создавать экземпляры объектов конструкторами.Я знаю, что могу перемещать конструкторы в закрытый / защищенный раздел, но как теперь фабрика будет создавать новые объекты, когда конструкторы являются частными / защищенными?Делать фабрику другом каждого класса не очень разумно, так как мне нужно предварительно объявить фабрику в каждом заголовке и написать дополнительную «фабрика друга»;в каждом классе.Как это сделать правильно?

1 Ответ

0 голосов
/ 19 мая 2018

В классе добавьте статический член в качестве указателя на тот же тип класса.Это будет ваш синглтон.

При инициализации экземпляра запускается конструктор.

Если это первый раз, статический член имеет значение null (никогда не инициализируется), запустите конструктор нормально иустановить значения по умолчанию.В конце также установите статический член на this.Теперь ваш синглтон инициализирован.

При последующих вызовах конструктора статический указатель не будет нулевым.Сделайте временный указатель на тип класса.Установите этот указатель на this, затем установите this на статический член и удалите указатель.Это удалит новый экземпляр и каждый раз будет возвращать один и тот же статический экземпляр.

...