Re[5]: А когда может не вызываться деструктор?
От: rg45 СССР  
Дата: 25.01.13 14:42
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, rg45, Вы писали:


A>>>

A>>>В языке программирования C++ деструктор полиморфного базового класса должен объявляться виртуальным.
A>>>Только так обеспечивается корректное разрушение объекта производного класса через указатель на соответствующий базовый класс.


A>>>это же чушь.


R>>Это высказывание является прямым следствием из 5.3.5/3.


J>
J>struct A { virtual f(); ~A(); };
J>struct B:A { f(); };

J>int main()
J>{
J>  B b;
J>  A* pa = &b;
  pa->>f(); //полиморфный!
J>}
J>

J>Здесь В замечательно обходится без виртуального деструктора и все корректно уничтожается, а 5.3.5/3 идет по градиенту.

Где в этом примере (цитирую) "разрушение объекта производного класса через указатель на соответствующий базовый класс" о котором шла речь выше?

Да, к сожалению, авторы статьи не дали четкого определения, что они понимают под полиморфным классом. Из общего контекста статьи можно догадаться, что они вкладывали в это понятие более широкий смысл — класс, объекты которого могут не только использоваться, но и удаляться через указатель базового класса (именно этому вопросу в статье уделено много внимания). Конечно же, это недочет, неточность формулировки, но еще не повод разбрасываться ярлыками типа "чушь" и "говносайт".
--
Справедливость выше закона. А человечность выше справедливости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.