Подводя итог, можно указать три способа указания явного конструктора через
Экземпляр (2); // делает экземпляр = 2; когда-нибудь работал?
A * instance = new A (2); // я никогда не уверен в этом и против * здесь
новый (& экземпляр) A (2);
и ароматы тех. Идея состоит в том, чтобы никогда не создавать объект, который не находится в надлежащем инициализированном состоянии, и конструкторы предназначены для обеспечения этого. (Это означает, что методы не должны проверять, был ли успешно вызван какой-либо метод .init (...).)
Мне кажется, что это более функциональный способ, особенно для классов, которые являются частью фреймворков и повторно используются в библиотеках. Если это то, что вас интересует, работайте над тем, чтобы все конструкторы, включая любой по умолчанию, доставляли полностью работающий экземпляр.
Исключительные случаи: Есть вещи, которые вы можете не иметь в операции конструктора, если они могут потерпеть неудачу, если только не целесообразно выбросить исключение из конструктора. А некоторым нравится иметь «пустые» экземпляры, которые распространяются с использованием последующих методов и даже подвергаются инициализации. Интересно изучить способы смягчения таких ситуаций и иметь надежные экземпляры, которые не имеют плохих состояний, от которых необходимо защищаться в реализациях методов и при использовании.
PS: В некоторых сложных случаях может быть полезно, чтобы инициализированный экземпляр (ссылка) был доставлен как результат функции или метода в «фабричном» классе, так что промежуточный экземпляр с недопустимой настройкой никогда не виден за пределами инкапсулирующего экземпляра или функции класса фабрики. Это дает нам,
+ 4. A * instance = MakeAnA (2);
+ 5. A * instance = InterestingClass.A (2);