![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Chaos A.D. |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Ещё одна проблема: излагаю пластами - код/комментарии...
Это, кто не знает, два класса, определяющие способ уничтожения объекта. Наследуются реальными классами.
Этот шаблон класса инстанцируется с параметром - одним из двух предыдущих классов. Он абстрактный, как видите.
В предыдущем коде я пометил место, где прога работает не совсем ясным для меня образом. Видите, Delete(frame); Далее пример: У меня предыдущие шаблоны в программе инстанцируются с параметром <DeleteAndNil>; Затем в одном месте у меня происходит вызов Remove для класса FindFrameManager; Далее идем вслед за дебуггером - вызывается delete obj; из DeleteAndNil, А вот obj = NULL не срабатывает. Локально он делает obj равным NULL, но вот frame из FindFrameManager по прежнему указывает на удаленный объект. Взгляните, пожалуйста, правильно ли все в коде? Правильно ли я передаю ссылку на указатель, или чего напутал? Кстати, написал упрощенный вариант вне контекста приложения, тоже не работает. Зато пашет, если frame указывает на тот параметр, которым инстанцирован шаблон DeleteAndNil; Как там в С++ с правилами о ссылках на указатели на полиморфные объекты? --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
||||||
|
|||||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Я дико извиняюсь, но буквально через 15 минут сам нашел решение проблемы. Вы можете подумать, что я вот так специально задаю разные вопросы, обильно снабдив их каким-нибудь кодом, выдранным из книг, чтобы показать свою, хм, "крутость". Но это не так. Вообще, поразительно, но факт - один из возможных, а по моему и самый лучший способ решения любой проблемы - это изложить ее коллеге/приятелю. Так как мне излагать проблему не кому, даже кошки нет (:, я вот сюда, в форум.
Оказывается, действительно, как я в конце поста писал - у С++ свои соображения по поводу ссылок на указатели на наследуемые классы. До этого я додумался, пока писал первый пост, а потом осталось только проверить. После создания похожей ситуации в миниатюре, я понял, что компилер создает временную переменную для указателя. А лечится это явным приведением типов. Ура. --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 5 Всего: 29 |
Нормально, у самого было и не раз |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
По-моему это у билдера свои соображения. Указатель на класс (пусть даже и полиморфный) ничем не отличается от указателя на что-либо другое (за исключением указателя на член класса/структуры), и код должен работать одинаково во всех случаях. Единственно что может произойти, что тип параметра DeleteAndNil не соотвествует типу frame, и существует преобразование второго к первому путем создания темпорального объекта. Хотя не представляю, как это можно сделать с указателями, но это может быть тоже "личным мнением" Билдера. Это сообщение отредактировал(а) Fantasist - 10.6.2005, 20:04 -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |