डिस्ट्रक्टर और सफ़ाई
संसाधन अपने-आप मुक्त करें
डिस्ट्रक्टर और सफ़ाई, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
डिस्ट्रक्टर क्या करता है
किसी ऑब्जेक्ट का जीवनकाल समाप्त होने पर डिस्ट्रक्टर चलता है। उसका काम ऑब्जेक्ट के स्वामित्व वाले संसाधनों को मुक्त करना है। इसका नाम ~ClassName होता है।
#include <iostream>
class File {
public:
~File() { std::cout << "closing file\n"; }
};
int main() {
File f;
} // ~File runs hereस्वामित्व वाली मेमोरी मुक्त करना
यदि किसी क्लास के पास हीप मेमोरी का स्वामित्व है, तो उसके डिस्ट्रक्टर को उसे मुक्त करना चाहिए। delete चलाने के लिए यही पारंपरिक स्थान है।
#include <iostream>
class Buffer {
int* data;
public:
Buffer(int n) : data(new int[n]) {}
~Buffer() { delete[] data; } // cleanup
};
int main() { Buffer b(10); }डिस्ट्रक्टर स्वचालित रूप से चलते हैं
स्टैक ऑब्जेक्ट्स के लिए आपको स्वयं डिस्ट्रक्टर नहीं चलाने पड़ते — कंपाइलर दायरा समाप्त होने पर यह कॉल जोड़ देता है।
सदस्यों का उलटा क्रम
सदस्य ऑब्जेक्ट्स को घोषित किए जाने के उलटे क्रम में नष्ट किया जाता है, डिस्ट्रक्टर की बॉडी चलने के बाद।
#include <iostream>
struct A { ~A() { std::cout << "~A\n"; } };
struct B { ~B() { std::cout << "~B\n"; } };
struct C {
A a;
B b; // destroyed before a
~C() { std::cout << "~C\n"; }
};
int main() { C c; }वर्चुअल डिस्ट्रक्टर
यदि आप किसी derived ऑब्जेक्ट को base पॉइंटर के माध्यम से डिलीट करते हैं, तो base डिस्ट्रक्टर virtual होना चाहिए — अन्यथा derived भाग लीक हो जाता है।
#include <iostream>
struct Base {
virtual ~Base() { std::cout << "~Base\n"; }
};
struct Derived : Base {
~Derived() override { std::cout << "~Derived\n"; }
};
int main() {
Base* p = new Derived();
delete p; // both run thanks to virtual
}डिस्ट्रक्टर को अपवाद नहीं उत्पन्न करना चाहिए
स्टैक खुलने के दौरान डिस्ट्रक्टर से अपवाद उत्पन्न करने पर प्रोग्राम समाप्त हो जाता है। डिस्ट्रक्टर को (अप्रत्यक्ष रूप से) noexcept चिह्नित होना चाहिए और अपवादों को बाहर नहीं निकलने देना चाहिए।
डिफ़ॉल्ट डिस्ट्रक्टर
यदि आप कोई डिस्ट्रक्टर नहीं लिखते, तो कंपाइलर ऐसा डिस्ट्रक्टर बनाता है जो हर सदस्य को नष्ट करता है। केवल RAII सदस्यों वाली क्लास के लिए यही बिल्कुल सही है।
#include <string>
#include <vector>
struct Record {
std::string name; // self-cleaning
std::vector<int> values; // self-cleaning
}; // default destructor is enough= default डिस्ट्रक्टर
कंपाइलर द्वारा बनाए गए डिस्ट्रक्टर का स्पष्ट रूप से अनुरोध करने के लिए ~Class() = default; लिखें — यह तब उपयोगी है जब आपको वर्चुअल डिस्ट्रक्टर चाहिए, लेकिन कोई कस्टम तर्क नहीं।
#include <iostream>
struct Shape {
virtual ~Shape() = default; // virtual + default
};गैर-मेमोरी संसाधन मुक्त करना
डिस्ट्रक्टर फ़ाइलें बंद करते हैं, लॉक मुक्त करते हैं और सॉकेट का कनेक्शन भी तोड़ते हैं — वे केवल मेमोरी मुक्त करने तक सीमित नहीं हैं। प्राप्त किया गया हर संसाधन यहीं संभाला जाना चाहिए।
ऑब्जेक्ट्स के बीच क्रम
एकाधिक लोकल ऑब्जेक्ट्स निर्माण के उलटे क्रम में नष्ट होते हैं, इसलिए कोई डिस्ट्रक्टर अपने से पहले बनाए गए ऑब्जेक्ट्स का सुरक्षित रूप से उपयोग कर सकता है।
RAII सदस्यों को काम करने दें
यदि हर सदस्य RAII प्रकार का है, तो अक्सर आपको कस्टम डिस्ट्रक्टर की बिल्कुल आवश्यकता नहीं होती। हाथ से लिखे गए डिस्ट्रक्टर केवल कच्चे संसाधनों के लिए रखें।
त्वरित जाँच
डिस्ट्रक्टर की अपनी समझ का परीक्षण करें।
पुनरावलोकन
आपने सीखा कि डिस्ट्रक्टर जीवनकाल के अंत में स्वामित्व वाले संसाधनों को स्वचालित रूप से मुक्त करते हैं, सदस्यों को घोषणा के उलटे क्रम में नष्ट करते हैं, उन्हें अपवाद उत्पन्न नहीं करना चाहिए और बहुरूपी base क्लास में उन्हें virtual होना आवश्यक है। RAII सदस्य अक्सर कस्टम डिस्ट्रक्टर की आवश्यकता समाप्त कर देते हैं।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “डिस्ट्रक्टर और सफ़ाई” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “डिस्ट्रक्टर और सफ़ाई” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“डिस्ट्रक्टर और सफ़ाई” में मैं क्या सीखूँगा?
संसाधन अपने-आप मुक्त करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“डिस्ट्रक्टर और सफ़ाई” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- RAII सिद्धांत
- डिस्ट्रक्टर और सफ़ाई
- Three/Five का नियम
- स्कोप गार्ड