Например, если operator=
не удалось в 4-м oop, тогда мы удаляем temp_data
, но как насчет значений первых 3 ячеек в temp_data
, которые были выделены внутри operator=
кода ? мы не освобождаем их.
new[]
выделяет весь массив и создает в нем все из T
объектов, прежде чем будет достигнуто l oop. delete[]
уничтожает все объектов в массиве и освобождает весь массив. Итак, конструктор и деструктор T
должны правильно инициализировать и завершить элементы данных T
.
l oop просто обновляет содержимое из элементы данных объектов в массиве. T::operator=
несет ответственность за правильное копирование и освобождение элементов данных T
по мере необходимости.
В этом коде Set::operator=
нет утечки. Однако есть небольшая ошибка - l oop необходимо использовать set.size
вместо size
.
for (int i = 0; i < set.size; ++i)
Новый массив выделяется на set.size
количество элементов, так что именно столько элементов l oop необходимо скопировать.
Использование size
для l oop, если назначенное Set
меньше, чем Set
скопировано, новый массив не скопирует все элементы. И если присвоить Set
, который больше, l oop будет go за пределами обоих массивов.
Если у вас возникла утечка, она должна быть в любом T::operator=
или в T::~T()
, ни один из которых вы не показали. Предполагая, что Set::Set()
и Set::~Set()
правильно инициализируются и освобождают data
, это будет.