กลไกเสมือน (virtual mechanism) ทำงานได้ก็ต่อเมื่อเรามีพอยน์เตอร์ของคลาสฐาน (base class) ที่ชี้ไปยังออบเจ็กต์ของคลาสลูก (derived class)
ใน C++ คอนสตรัคเตอร์ไม่สามารถเป็นเสมือน (virtual) ได้ เนื่องจากเมื่อคอนสตรัคเตอร์ของคลาสถูกดำเนินการ ไม่มีตารางเสมือน (virtual table) ในหน่วยความจำ หมายถึงยังไม่มีพอยน์เตอร์เสมือน (virtual pointer) ถูกกำหนด ดังนั้น คอนสตรัคเตอร์ควรเป็น non-virtual เสมอ
แต่เดสตรัคเตอร์เสมือน (virtual destructor) เป็นไปได้
ตัวอย่างโค้ด
#include<iostream> using namespace std; class b { public: b() { cout<<"Constructing base \n"; } virtual ~b() { cout<<"Destructing base \n"; } }; class d: public b { public: d() { cout<<"Constructing derived \n"; } ~d() { cout<<"Destructing derived \n"; } }; int main(void) { d *derived = new d(); b *bptr = derived; delete bptr; return 0; }
ผลลัพธ์
Constructing base Constructing derived Destructing derived Destructing base