ভার্চুয়াল মেকানিজম তখনই কাজ করে যখন আমাদের কাছে একটি প্রাপ্ত ক্লাস অবজেক্টের জন্য একটি বেস ক্লাস পয়েন্টার থাকে।
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