| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Вектор и деструктор |
| Автор: B3cK 30.5.2006, 16:03 | ||
При добавлении нового объекта данного класса в вектор вылетает ошибка "Debug Assertion Failed!". Компилятор VC6++ ошибок не выводит. Если деструктор закоментировать, то все отлично работает. Как можно объяснить такое поведение деструктора при добавлении объекта в вектор? |
| Автор: maxim1000 30.5.2006, 16:12 |
| при копировании такого объекта создаётся новый объект с такими же указателями (ну и при присваивании - соответственно) когда один из них удаляется, указатели становятся некорректными когда удаляется второй объект, получается ошибка... |
| Автор: B3cK 30.5.2006, 16:39 |
| Подожди, какое копирование, присваивание. Я через функцию push_back() помещаю в конец вектора новый полностью инициализированный объект. |
| Автор: MAKCim 30.5.2006, 17:15 | ||||
создается копия объекта, а т к у тебя не определен копирующий конструктор и ты работаешь с чистыми указателями, возможны проблемы напиши
|
| Автор: B3cK 30.5.2006, 17:28 |
| Спасиб, теперь конфликт понятен. Вопрос закрыт. |
| Автор: Earnest 30.5.2006, 17:37 |
| Оператор присваивания тоже нужен. Самый простой способ проверить - декларировать в private-секции оператор присваивания и выслушать от компилятора массу приятных слов. Вообще лучше всегда явно определять, копируемый класс ты пишешь или нет. Т.е. если в классе используются некопируемые сущности (указатели или какие-нибудь неразделяемые дескритпоры ресурсов), нужно либо явно определять операторы копирования, либо относить их в private-секцию. |