![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
В::B() и B::~B() не реализованы, но неопределённых ссылок нет (компилятор g++, mingw32). Если деструктор не виртуальный, неопределенные ссылки будут. Будет ли так при других компиляторах? Это сообщение отредактировал(а) math64 - 21.7.2014, 09:00 |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
дело не в виртуальности, а оптимизации вызова деструктора не происходит и не может произойти, оптимизирующий компилятор выкидывает деструктор. сравни http://ideone.com/cE1eGN и http://ideone.com/TNcb6u Добавлено через 6 минут и 18 секунд наверняка Добавлено через 13 минут и 40 секунд пожалуй насчет виртуальности я не прав)) |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
По delete b проверяется b != NULL, и если b != NULL вызывается через таблицу виртуальных методов виртуальный деструктор.
В вашем втором варианте создаётся объект B, для чего нужна реализация конструктора B::B(), а для запонения в нём таблицы виртуальных методов нужна реализация деструктора B::~B(). |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |