Если я правильно помню, в Symbian C ++ не было поддержки для правильной обработки исключений, и создание объекта основывалось на двухэтапном процессе инициализации - конструктор не может генерировать, поэтому существует простой конструктор без выброса, а затем шаг инициализации.Одна из проблем, связанных с двухфазной инициализацией, заключается в том, что она возлагает бремя выполнения построения и инициализации (два отдельных шага) на пользовательский код, и это подвержено ошибкам, о чем вы должны помнить при создании каждого объекта.
Чтобы облегчить эту нагрузку, дизайн зависел от статических функций, таких как NewL
, NewLC
(я не помню, было ли их больше).В этой среде наличие частного конструктора запрещает пользовательскому коду создавать объекты типа без выполнения двухфазной инициализации и заставляет их использовать предоставленный механизм NewXXX
.Эти функции, будучи частью класса, имеют доступ к закрытому конструктору и создают экземпляр объекта, а затем выполняют любую инициализацию.