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