![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 19.09.2011
Сообщений: 21
|
![]()
Проблема в следующем. Есть базовый класс A от которого путем наследования создается класс B. Далее, я выделяю память под объект класса B инструкцией:
B *p = new B; После этого заношу адрес этого объекта в список указателей на объекты класса A. Через некоторое время мне нужно освободить память из-под этого объекта. Я достаю из списка его адрес, присваиваю указателю на А: A *pA; дальше делаю преобразование типа: B *deletingBObject = static_cast<B *>(pA). И собственно удаляю объект: delete deletingBObject; Приложение выдает ошибку при выполнении последней инструкции. Что может быть не так? И можно ли подобным образом освобождать память из-под объекта производного класса? Последний раз редактировалось Trinock; 20.09.2011 в 18:08. Причина: Исправлено с delete B на delete deletingBObject |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 22.09.2007
Сообщений: 71
|
![]()
Я не совсем понял суть преобразования, вы удаляете объект или указатель на него, на сколько я знаю удаляют указатель освобождая зарезервированную под него область памяти...
"Пилите, Шура, пилите. Они золотые".....
![]() |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,087
|
![]() Цитата:
Если преобразование выполняется только с целью удаления объекта, то оно не надо. Заведите только правило на счет виртуальных деструкторов у базовых классов (оно в любом случае должно быть, даже если пользоваться не будете). |
|
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 20.11.2010
Сообщений: 16
|
![]()
delete B? B - это же класс, нет?
|
![]() |
![]() |
![]() |
#5 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]() Код:
У вас ошибка в том, что вы, судя по всему, пытаетесь удалить не объект класса, а сам класс, т.е. тип.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 19.09.2011
Сообщений: 21
|
![]()
Исправил с delete B на delete deletingBObject, удаляю конечно по указателю, а не сам класс, тогда бы просто не скомпилировалось, а у меня ошибка возникает при выполнении программы когда удаляется объект. Прошу прощения за путаницу.
Цитата:
|
|
![]() |
![]() |
![]() |
#7 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() |
![]() |
![]() |
![]() |
#8 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
![]()
ваша проблема связана с использованием static_cast там, где нужно использовать dynamic_cast.
основное назначение static_cast - преобразование перечисляемых типов. а вас типичный случай даун-каста. |
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 27.04.2009
Сообщений: 184
|
![]() Цитата:
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!
|
|
![]() |
![]() |
![]() |
#10 | |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]() Цитата:
Код:
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[Java] Создание объекта внутри объекта этогоже класса. | Svarogich | Помощь студентам | 2 | 01.08.2011 16:03 |
Потоковый вывод из производного класса | Mike92 | Общие вопросы C/C++ | 11 | 08.05.2011 10:26 |
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов | Lanx | Помощь студентам | 0 | 06.04.2011 20:24 |
Как в базовом классе описать указатель на объект производного класса? | MasterGH | Общие вопросы C/C++ | 3 | 16.11.2009 02:55 |
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? | TwiX | Общие вопросы Delphi | 3 | 15.11.2009 00:54 |