Имеем класс D унаследованного от класса B , а в классе D есть данные класса M. Вопрос при вызове деструктора класса D порядок будет M D B ?
Ответ Гарантирован следующий порядок: Сначала отрабатывает код деструктора самого класса (D). Затем вызываются деструкторы подобъектов самого класса (M). При этом M должен быть именно подобъектом, указатель не катит. Порядок уничтожения подобъектов противоположен порядку их объявления в классе. Затем вызываются деструкторы невиртуальных базовых классов (B). Для них продолжается эта же история, рекурсивно вниз. Порядок уничтожения базовых объектов противоположен порядку их объявления в списке наследования. Затем вызываются деструкторы всех виртуальных базовых классов. Порядок вызова противоположен порядку виртуальных конструкторов: обходится дерево базовых классов, составляется список виртуальных базовых классов (игнорируя дубликаты), и в обратном порядке вызываются деструкторы.
Ссылки на официальный C++ FAQ: When I write a destructor, do I need to explicitly call the destructors for my member objects? When I write a derived class’s destructor, do I need to explicitly call the destructor for my base class? What is the exact order of destructors in a multiple and/or virtual inheritance situation?