Здравствуйте, RSDN_new_user, Вы писали:
RSD>Доброго дня, RSD>возник вопрос по vptr — у меня в VS2005 получается, что в деструкторе он уже не работает. Как так получается, если члены класса, разрушаются после выполнения деструктора? Он разве не является членом класса?
vptr — это способ реализации виртуальности, а не член класса. Значения vptr объектов базового и производного классов различны. Поэтому при конструировании объекта, при переходе от конструктора базового класса к конструктору производного, vptr изменяет свое значение. И при разрушении объектов тоже изменяет от деструктора к деструктору, только в обратном порядке.
А ты что, хочешь из деструктора базового класса позвать переопределенную виртуального функцию производного? Нет уж, это вам не C#, тут все строго — когда работает деструктор базового класса, объект производного уже разрушен, и нечего обращаться к мертвому объекту!
--
Справедливость выше закона. А человечность выше справедливости.