वर्चुअल मैकेनिज्म तभी काम करता है जब हमारे पास व्युत्पन्न क्लास ऑब्जेक्ट के लिए बेस क्लास पॉइंटर होता है।
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