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

C++ में वर्चुअल डिस्ट्रक्टर्स का उपयोग कब करना चाहिए?


स्कॉट मेयर्स Effective C++ में कहते हैं:

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

इसलिए आपको पॉलीमॉर्फिक बेस क्लासेस में डिस्ट्रक्टर्स को वर्चुअल घोषित करना चाहिए। ऐसा इसलिए है क्योंकि यदि आप डेराइव्ड कंस्ट्रक्टर का उपयोग करके बेस क्लास का ऑब्जेक्ट बनाते हैं:

Base *b = new Derived(); // b का उपयोग करें delete b;

यदि Base का डिस्ट्रक्टर वर्चुअल नहीं है तो इस मामले में delete b का व्यवहार अनडिफाइंड है। डिस्ट्रक्टर की कॉल किसी नॉन-वर्चुअल कोड की तरह हल होगी। इसलिए बेस क्लास का डिस्ट्रक्टर कॉल होगा लेकिन डेराइव्ड क्लास का नहीं, इससे रिसोर्स लीक होगा।



  1. - स्मार्ट पॉइंटर क्या है और C++ में इसका उपयोग कब करना चाहिए?

    स्मार्ट पॉइंटर एक क्लास है जो रॉ (या बेयर) C++ पॉइंटर को लपेटती है। इसका उपयोग उन रिसोर्सेज को प्रबंधित करने के लिए किया जाता है जिनकी ओर पॉइंटर इंगित करता है। उदाहरण के लिए, यदि उस मेमोरी स्थान का रेफरेंस खो जाता है। यह एक तरह से गार्बेज कलेक्टर की तरह कार्य करता है। कई स्मार्ट पॉइंटर टाइप्स हैं।

  1. - C/C++ में फॉरवर्ड डिक्लेरेशन का उपयोग कब कर सकते हैं?

    फॉरवर्ड डिक्लेरेशन डिक्लेरेशन के बाद के कोड को यह जानने देता है कि Person नाम की क्लासेस हैं। यह कंपाइलर को संतुष्ट करता है जब यह इन नामों को उपयोग होते देखता है। बाद में लिंकर क्लासेस की परिभाषा ढूंढ लेगा। उदाहरण Class Person; void myFunc(Person p1) {    // ... } Class Person {   &

  1. - C++ में 'friend' का उपयोग कब करना चाहिए?

    किसी क्लास का फ्रेंड फ़ंक्शन उस क्लास के स्कोप के बाहर परिभाषित होता है लेकिन उसे उस क्लास के सभी प्राइवेट और प्रोटेक्टेड मेंबर्स को एक्सेस करने का अधिकार होता है। भले ही फ्रेंड फ़ंक्शन के प्रोटोटाइप क्लास परिभाषा में दिखाई देते हैं, फ्रेंड मेंबर फ़ंक्शन नहीं होते। एक फ्रेंड एक फ़ंक्शन, फ़ंक्शन टेम