Почему вызывается деструктор

206
15 сентября 2021, 07:40

Не совсем понятно почему сразу после создания объекта вызывается его деструктор.

IShape *shape = &Rectangle(5, 5);

IShape это базовый класс для Rectangle. Однако после серии вызовов деструкторов от Rectangle, IShape все равно получает адрес какого-то инициализированного объекта в точности как Rectangle(5, 5).

Answer 1

Во-первых, если вы не реализовали какую-то свою версию перегруженного оператора &, этот код некомпилируем в принципе. Результатом выражения Rectangle(5, 5) является временный объект. В С++ запрещается применять встроенный угарный оператор & ко временным объектам. То есть никакого "сразу вызывается его деструктор" тут нет - код просто некорректен.

Во-вторых, как сказано выше, выражение Rectangle(5, 5) создает временный объект. И да, за исключением ряда специальных случаев, такой объект существует лишь до конца того выражения, которое его создало. То есть деструктор для таких объектов вызывается не "сразу", но "почти сразу". Не было бы ничего удивительного в быстром уничтожении такого объекта (если бы ваш код был корректным).

READ ALSO
Создать один массив объектов из двух. C++

Создать один массив объектов из двух. C++

Допустим у меня есть два массива по 5 объектов класса ObjЯ хочу поместить эти объекты из разных массивов в один результирующий, размерностью...

103
Дебаг C++ кода в VS Code

Дебаг C++ кода в VS Code

При попытке запуска для дебага (F5, брекпойнт поставлен) кода на C++ в Visual Studio Code (ОС Ubuntu 1804) возникает ошибка

111
Не могу создать WinForms C++ проект в Visual Studio

Не могу создать WinForms C++ проект в Visual Studio

Всем приветСоздаю проект Winforms C++

169
Функция не возвращает string

Функция не возвращает string

Делаю функцию, преобразовывающую номер из номера из "+7(9хх)хх-ххх-хх" в "89ххххххххх"

98