Не совсем понятно почему сразу после создания объекта вызывается его деструктор.
IShape *shape = &Rectangle(5, 5);
IShape
это базовый класс для Rectangle
.
Однако после серии вызовов деструкторов от Rectangle
, IShape
все равно получает адрес какого-то инициализированного объекта в точности как Rectangle(5, 5)
.
Во-первых, если вы не реализовали какую-то свою версию перегруженного оператора &
, этот код некомпилируем в принципе. Результатом выражения Rectangle(5, 5)
является временный объект. В С++ запрещается применять встроенный угарный оператор &
ко временным объектам. То есть никакого "сразу вызывается его деструктор" тут нет - код просто некорректен.
Во-вторых, как сказано выше, выражение Rectangle(5, 5)
создает временный объект. И да, за исключением ряда специальных случаев, такой объект существует лишь до конца того выражения, которое его создало. То есть деструктор для таких объектов вызывается не "сразу", но "почти сразу". Не было бы ничего удивительного в быстром уничтожении такого объекта (если бы ваш код был корректным).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Допустим у меня есть два массива по 5 объектов класса ObjЯ хочу поместить эти объекты из разных массивов в один результирующий, размерностью...
При попытке запуска для дебага (F5, брекпойнт поставлен) кода на C++ в Visual Studio Code (ОС Ubuntu 1804) возникает ошибка
Делаю функцию, преобразовывающую номер из номера из "+7(9хх)хх-ххх-хх" в "89ххххххххх"