@sddvxd

Что будет с объектом если вызвать несколько раз его конструкторы?

Здравствуйте

//source.cpp
CClass::CClass(){} //Первый конструктор
CClass::CClass(int a){} //Второй конструктор


//main.cpp

CClass obj; //вызываем первый конструктор

obj = 1; //вызываем второй конструктор


Что происходит с объектом когда мы вызываем второй раз конструктор? Просто выполняется код второго конструктора или объект создается заново?
  • Вопрос задан
  • 432 просмотра
Решения вопроса 1
Вторая запись это не вызов конструктора, а оператор присваивания.

Сначала создавасться новый временный объект через второй конструктор (т.к. конструктор является implicit, то допустимо неявное преобразование из int в CClass). Затем у первого объекта вызовется оператор присваивания с временным объектом в качестве параметра.

В C++ без сложных манипуляций невозможно второй раз вызвать конструктор.

Фактически ваш код эквивалентен этому:

CClass obj(); // на самом деле так писать нельзя, это не вызов конструктора а объявление функции

obj = CClass(1);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Wexter
Кто сказал что второй раз вызывается конструктор?
Второй раз вы вызываете оператор =, если он у вас переопределён. А иначе вам конпелятор намекнёт на вашу профнепригодность
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы