Trong lúc dựng hoặc hủy, kiểu động của object chính là lớp đang chạy constructor/destructor — chưa/không còn là lớp dẫn xuất.
- Trong constructor của
Base: object "chưa phải"Derived→ lời gọi virtual phân giải về phiên bản củaBase, không phải override củaDerived. - Trong destructor: phần
Derivedđã bị hủy trước → cũng gọi vềBase.
Hệ quả: đừng trông đợi dynamic dispatch trong ctor/dtor (Effective C++, Item 9). Nếu đó là pure virtual không có định nghĩa → undefined behavior.
Muốn hành vi phụ thuộc dẫn xuất, dùng "khởi tạo hai pha": gọi một hàm init() riêng sau khi object đã dựng xong.