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