как протестировать оператор присваивания и конструктор копирования класса? |
Здравствуйте, гость ( Вход | Регистрация )
как протестировать оператор присваивания и конструктор копирования класса? |
Litkevich Yuriy |
20.4.2010, 15:36
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Собственно вопрос: как протестировать класс на корректность работы самописаных конструктора копирования и оператора присваивания, и на предмет их существования вообще.
Положим, что в конструкторе класса создаётся динамический объект, а в деструкторе удаляется. Если свои конструктора копирования и оператора присваивания не определять, то компилятор будет использовать побитовое копирование. При этом могут возникать коварные ситуации. Как я понимаю, связанные с двойным освобождением ресурсов. Можно ли написать код, который бы осуществлял подобный тест? |
|
|
Влад |
20.4.2010, 21:36
Сообщение
#2
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Юрий, просто Стандарт языка (п. 5.3.5 положение (clause) 2) четко описывает требования к выделению и удалению памяти:
- если память была выделена по new для единичного объекта (неважно, какого типа) - то удаляться она должна только delete для единичного объекта; - если память была выделена по new[] для массива объектов (array form) - то удаляться она должна только delete[] для массива объектов (тоже array form) и никак иначе. Иначе поведение программы не определено (Otherwise behavior is undefined, если мой склероз мне не изменяет). Причем, Стандарт никак не конкретизирует это "неопределенное поведение" - программе разрешается делать все, что ей заблагорассудится, начиная от порчи памяти и невоспроизводимых глюков, и вплоть до format C:. |
|
|
Текстовая версия | Сейчас: 25.11.2024, 8:32 |