- если класс полиморфен - т.е. имеет хоть один виртуальный метод. короче, кратко. типичная последовательность действий в конструкторе: 1) вызвать конструктор базового класса 2) записать указатель VFT в самое начало блока выделенных данных 3) вызвать конструктора всех мемберов класса 4) если есть in-class инициализаторы (это когда внутри класса: class A{public: int m_A = 123; .... то применить их 5) выполнить тело конструктора 6) вернуться (пункты 1-4 относятся к области Constructor Member Initializer List и выполняются явно или неявно - но полюбому) когда мы динамически с помощью оператора new создаём экземпляр класса, то происходит следующее: сперва с помощью malloc выделяется память c sizeof этого класса (это кстати важно, чтобы дифференцировать разные классы) а затем уже вызывается сам конструктор. ему неявно передаётся этот поинтер. онже `this'. ну а теперь по схеме, если у нас уже хренкакой по иерархии потомок, конструктора вызывают друг друга вплоть до конструктора базового класса. а вот он первым осуществит запись указателя VFT в самое начало выделенного блока памяти. так что сразу после маллока, ставим бряк на запись вначало выделенного блока, и первый кто попадётся - будет конструктор базового класса. вот. конечно же проще всего постепить внутрь по коллам, но просто я иногда так это решаю, поскольку всё может быть настолько охрененно заинлайнено, что никаких коллов и не найдешь.