ভার্চুয়াল মেকানিজম শুধু তখন কাজ করে যখন আমাদের কাছে একটি বেস ক্লাস পয়েন্টার থাকে যা একটি ডেরাইভড ক্লাস অবজেক্টের দিকে নির্দেশ করে।
C++-এ, কনস্ট্রাক্টর ভার্চুয়াল হতে পারে না, কারণ যখন একটি ক্লাসের কনস্ট্রাক্টর এক্সিকিউট হয় তখন মেমোরিতে কোনো ভার্চুয়াল টেবিল থাকে না, মানে কোনো ভার্চুয়াল পয়েন্টার এখনও ডিফাইনড নেই। তাই কনস্ট্রাক্টর সবসময় নন-ভার্চুয়াল হওয়া উচিত।
তবে ভার্চুয়াল ডেস্ট্রাক্টর সম্ভব।
#includeusing 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