С этим можно было справиться, переопределив методы TRUE allocator и deallocator в Delphi, NewInstance и FreeInstance . Конструкторы и деструкторы в Delphi только инициализируют и финализируют соответственно, они не выделяют и не освобождают память, поэтому попытки скрыть конструкторы всегда были немного ошибочными.
т.е. можно было разрешить свободное использование любого и всех конструкторов, если вы переопределили NewInstance , так что он когда-либо возвращал ссылку только на одно выделение памяти для класса.
Но попытка навязать модель использования / поведения в базовом классе - ошибка imho. НЕ ВСЕ шаблоны являются или требуют определенных классов для инкапсуляции шаблона.
В таких случаях вы в конечном итоге создаете что-то, что становится излишне сложным, а усложнение влечет за собой ошибки в моем опыте, и тогда целью упражнения становится попытка найти недостатки в реализации шаблона, а затем попытаться реализовать меры защиты от этих недостатков. вместо того, чтобы продолжать практическую работу, которую должен был выполнять синглтон-класс.
Гораздо проще и эффективнее документировать ИСПОЛЬЗОВАНИЕ класса.
Документация как метод реализации этого шаблона работала безупречно в течение 15 лет для объектов Application и Screen в VCL, например, не говоря уже о бесчисленных других синглетонах, которые я создал в те годы.