![]() |
|
Модераторы: bsa |
![]()
|
|
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
||||
|
||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
При явном указании принадлежности (через :: ) виртуальности не будет не только в конструкторах и деструкторах
Это сообщение отредактировал(а) xvr - 18.6.2008, 20:09 |
||||||||
|
|||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
отсюда вывод - нельзя вызывать виртуальные методы из конструктора и деструктора (если только через явное указание принадлежности классу). |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Вывод неправильный - Draft 2005, 12.7 p4
|
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
xvr, т.е. получается, что таблица виртуальных методов обновляется прямо перед входом в тело конструктора, но после инициализации всех членов класса. А в деструкторе с точностью до наоборот - после выхода из тела деструктора восстанавливается таблица класса предка. Правильно ли я понял?
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
что то я запутался, но нижеприведенный пример выдает А:f1() A::f2() , что на мой взгляд не соотвествует написанному.. прошу пояснения
Добавлено через 1 минуту и 43 секунды а вобше разве это не UB ? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
mes, в том то и дело, что соответствует. Когда выполняется конструктор класса A, класс A1 еще не сконструировался и таблица виртуальных методов содержит указатели на методы класса А, который уже начал конструироваться, когда дело доходит до деструктора класса А, то класс А1 полностью деинициализировался и восстановил указатели на виртуальные методы класса А (ну или деструктор класса А это сделал перед входом в тело).
|
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Да. (Хотя технически таблицу виртуальных методов в деструкторе восстанавливает сам деструктор при входе, а не наследник при выходе, впрочем результат одинаковый) |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |