![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| B3cK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 29.5.2005 Где: Минск Репутация: 1 Всего: 1 |
При добавлении нового объекта данного класса в вектор вылетает ошибка "Debug Assertion Failed!". Компилятор VC6++ ошибок не выводит. Если деструктор закоментировать, то все отлично работает. Как можно объяснить такое поведение деструктора при добавлении объекта в вектор? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
при копировании такого объекта создаётся новый объект с такими же указателями (ну и при присваивании - соответственно)
когда один из них удаляется, указатели становятся некорректными когда удаляется второй объект, получается ошибка... -------------------- qqq |
|||
|
||||
| B3cK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 29.5.2005 Где: Минск Репутация: 1 Всего: 1 |
Подожди, какое копирование, присваивание.
Я через функцию push_back() помещаю в конец вектора новый полностью инициализированный объект. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
это может прозвучать несколько странно, но в вектор вставить ничего нельзя... ни в конец, ни в начало, ни в середину вектор представляет собой набор ячеек, куда можно что-нибудь записывать таким образом, объекты не вставляются, а присваиваются ячейкам (честно говоря, не знаю, реализовано это через оператор присваивания или конструктор копии, обычно, лучше переопределять и то, и другое) -------------------- qqq |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
создается копия объекта, а т к у тебя не определен копирующий конструктор и ты работаешь с чистыми указателями, возможны проблемы напиши
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| B3cK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 29.5.2005 Где: Минск Репутация: 1 Всего: 1 |
Спасиб, теперь конфликт понятен.
Вопрос закрыт. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Оператор присваивания тоже нужен. Самый простой способ проверить - декларировать в private-секции оператор присваивания и выслушать от компилятора массу приятных слов.
Вообще лучше всегда явно определять, копируемый класс ты пишешь или нет. Т.е. если в классе используются некопируемые сущности (указатели или какие-нибудь неразделяемые дескритпоры ресурсов), нужно либо явно определять операторы копирования, либо относить их в private-секцию. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |