Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

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

  1. सी ++ में शुद्ध आभासी विनाशक

    सी ++ में शुद्ध आभासी विनाशक संभव है। यदि किसी वर्ग में शुद्ध आभासी विनाशक है तो उसे शुद्ध आभासी विनाशक के लिए एक कार्य निकाय प्रदान करना होगा। उदाहरण कोड #include <iostream> using namespace std; class B {    public:    virtual ~B()=0; // Pure virtual destructor }; B::~B(

  1. C++ में इनलाइन वर्चुअल फंक्शन

    सी ++ में वर्चुअल फ़ंक्शन बेस क्लास पॉइंटर्स की सूची बनाने के लिए उपयोग करते हैं और किसी भी व्युत्पन्न वर्ग के कॉल विधियों को व्युत्पन्न क्लास ऑब्जेक्ट को जानने के बिना भी उपयोग करते हैं। वर्चुअल फ़ंक्शंस को रनटाइम पर देर से हल किया जाता है। वर्चुअल फ़ंक्शन का मुख्य उपयोग रनटाइम बहुरूपता प्राप्त कर

  1. सी ++ में वर्चुअल विनाशकों का उपयोग कब करें?

    स्कॉट मेयर्स इन इफेक्टिव C++ कहते हैं - यदि किसी वर्ग में कोई वर्चुअल फ़ंक्शन है, तो उसके पास एक वर्चुअल डिस्ट्रक्टर होना चाहिए, और वह वर्ग जो बेस क्लास के लिए डिज़ाइन नहीं किया गया है या पॉलीमॉर्फिक रूप से उपयोग करने के लिए डिज़ाइन नहीं किया गया है, उसे वर्चुअल डिस्ट्रक्टर घोषित नहीं करना चाहिए।