Здравствуйте, Дмитрий Наумов, Вы писали:
ДН>ДН>class B
ДН>{
ДН>public:
ДН> void DoSomethingBeforeExit() { OnClose(); }
ДН> virtual void OnClose() { ... }
ДН>};
ДН>class D
ДН>{
ДН>public:
ДН> ~D() { DoSomethingBeforeExit(); }
ДН> virtual void OnClose() { ... }
ДН>};
ДН>
ДН>Итак, теперь словами. Валидно ли вызвать виртуальную функцию (косвенно или напрямую) из деструктора дочернего объекта? Или более общий вопрос — когда разрушается (заполняется заглушками) таблица вирт. функций? При входе в деструктор?
ДН>Спасибо за то что ответили на юзаный-переюзанный вопрос.
12.7.3
Member functions, including virtual functions (10.3), can be called during construction or destruction (12.6.2). When a virtual function is called
directly or indirectly from a constructor (including from the mem-initializer for a data member) or from a destructor, and the object to which the call applies is the object under construction or destruction, the function called is the one defined in the constructor or destructor's own class or in one of its bases, but not a function overriding it in a class derived from the constructor or destructor's class, or overriding it in one of the other base classes of the most derived object (1.8).
Дима, догадайся с 3-х раз, откуда сия цитата ?