Destructors in C++ Notes | Destructor Syntax, Characteristics, Working & Applications | Basic Computer Engineering | RGPV BTech First Year
Destructors in C++ Notes | Destructor Syntax, Characteristics, Working & Applications | Basic Computer Engineering | RGPV BTech First Year
Destructors in C++
Destructor C++ Programming का एक विशेष (Special) Member Function होता है जिसका मुख्य कार्य Object के Destroy होने पर उसके द्वारा उपयोग किए गए Resources तथा Memory को Release करना होता है। जब किसी Object का Lifetime समाप्त हो जाता है, तब Destructor स्वतः (Automatically) Execute हो जाता है।
Object Oriented Programming में Constructor Object को Initialize करता है जबकि Destructor Object के समाप्त होने पर उसकी सफाई (Cleanup) करता है। यदि Program में Dynamic Memory Allocation, File Handling अथवा अन्य Resources का उपयोग किया गया हो, तो Destructor उनका Proper Release सुनिश्चित करता है।
RGPV B.Tech First Year के Basic Computer Engineering Subject में Destructor in C++ अत्यंत महत्वपूर्ण Topic है। University Examination, Practical तथा Viva में Destructor की Definition, Syntax, Characteristics, Constructor एवं Destructor के Difference तथा Dynamic Memory Management से संबंधित प्रश्न नियमित रूप से पूछे जाते हैं।
↓
Constructor Executes
↓
Object Used
↓
Destructor Executes
↓
Memory Released
Introduction to Destructor
जब Program में कोई Object बनाया जाता है, तब उसके लिए Memory Allocate होती है। Program समाप्त होने अथवा Object के Scope से बाहर जाने पर उस Memory को Release करना आवश्यक होता है। यदि ऐसा न किया जाए, तो Memory Leak जैसी समस्याएँ उत्पन्न हो सकती हैं।
इसी समस्या के समाधान के लिए C++ में Destructor उपलब्ध कराया गया है। Destructor Object के Destroy होते ही Automatically Execute होता है तथा आवश्यक Cleanup Operations करता है।
What is Destructor?
Destructor Class का ऐसा Special Member Function है जिसका Name Class के Name के समान होता है लेकिन उसके पहले ~ (Tilde) लगाया जाता है। इसका कोई Return Type तथा कोई Parameter नहीं होता। इसका उपयोग Object के Destroy होने पर Memory तथा अन्य Resources को Release करने के लिए किया जाता है।
ऊपर दिए गए उदाहरण में ~Student() Class का Destructor है। Object Destroy होने पर यह स्वतः Execute होगा।
Need of Destructor
Destructor का मुख्य उद्देश्य Program द्वारा उपयोग किए गए Resources को सुरक्षित रूप से Release करना है ताकि Memory Leak तथा Resource Leakage जैसी समस्याओं से बचा जा सके।
- Allocated Memory Release करने के लिए।
- Dynamic Objects की Cleanup करने के लिए।
- Files को Automatically Close करने के लिए।
- Database एवं Network Connections Release करने के लिए।
- Memory Leak रोकने के लिए।
- Program Resources का Efficient Management करने के लिए।
- Reliable Object Oriented Programming सुनिश्चित करने के लिए।
Advantages of Destructor
| Advantage | Description |
|---|---|
| Automatic Cleanup | Object Destroy होते ही Resources Automatically Release हो जाते हैं। |
| Memory Management | Dynamic Memory को सुरक्षित रूप से Free करता है। |
| Prevents Memory Leak | Unused Memory Release करके Memory Leak रोकता है। |
| Resource Management | Files, Buffers एवं Connections को Proper तरीके से Close करता है। |
| Reliable Programming | Program को अधिक Stable एवं Maintainable बनाता है। |
Characteristics of Destructor
Destructor की कुछ महत्वपूर्ण विशेषताएँ (Characteristics) होती हैं जो इसे Constructor तथा सामान्य Member Function से अलग बनाती हैं। Destructor Object के समाप्त (Destroy) होते ही स्वतः Execute होता है तथा आवश्यक Cleanup Operations करता है।
- Destructor का Name हमेशा Class Name के पहले ~ (Tilde) लगाकर लिखा जाता है।
- Destructor का कोई Return Type नहीं होता।
- Destructor कोई Parameter Accept नहीं करता।
- Object Destroy होते ही Automatically Execute होता है।
- एक Class में केवल एक Destructor होता है।
- Destructor को Overload नहीं किया जा सकता।
- Memory तथा Resources Release करने के लिए उपयोग किया जाता है।
Rules of Destructor
Destructor Declare करते समय C++ के कुछ महत्वपूर्ण नियमों का पालन करना आवश्यक होता है।
| Rule | Description |
|---|---|
| Same Class Name | Destructor का Name Class Name के समान होता है तथा उसके पहले ~ लगाया जाता है। |
| No Return Type | Destructor का कोई Return Type नहीं होता। |
| No Parameters | Destructor कोई Argument अथवा Parameter स्वीकार नहीं करता। |
| Only One Destructor | प्रत्येक Class में केवल एक Destructor हो सकता है। |
| Cannot be Overloaded | Destructor Overloading संभव नहीं है। |
Syntax of Destructor
Destructor Declare करने की सामान्य Syntax नीचे दी गई है।
यहाँ ~ClassName() Destructor है जो Object Destroy होने पर Execute होगा।
Working of Destructor
↓
Object Created
↓
Constructor Executes
↓
Program Executes
↓
Object Destroyed
↓
Destructor Executes
जब Object का Scope समाप्त हो जाता है अथवा Program समाप्त होता है, तब Destructor Automatically Execute होकर Memory एवं अन्य Resources को Release करता है।
Basic Example of Destructor
Output
ऊपर दिए गए Program में पहले Constructor Execute होता है क्योंकि Object Create होता है। Program समाप्त होने पर Object Destroy होता है और Destructor स्वतः Execute हो जाता है।
Constructor vs Destructor (Basic Difference)
| Constructor | Destructor |
|---|---|
| Object Create होने पर Execute होता है। | Object Destroy होने पर Execute होता है। |
| Object को Initialize करता है। | Object की Cleanup करता है। |
| एक Class में अनेक Constructors हो सकते हैं। | एक Class में केवल एक Destructor होता है। |
| Overloading संभव है। | Overloading संभव नहीं है। |
Automatic Calling of Destructor
C++ में Destructor को Programmer द्वारा Explicitly Call करने की आवश्यकता नहीं होती। जैसे ही किसी Object का Scope समाप्त होता है अथवा Program समाप्त होता है, Destructor Automatically Execute हो जाता है।
Automatic Calling के कारण Programmer को Memory Release करने के लिए अतिरिक्त Code नहीं लिखना पड़ता। इससे Program अधिक Reliable तथा Error Free बनता है।
↓
Program Execution
↓
Scope Ends
↓
Destructor Called Automatically
Memory Deallocation using Destructor
Destructor का सबसे महत्वपूर्ण कार्य Object द्वारा उपयोग की गई Memory तथा अन्य Resources को Release करना है। यदि Program में Dynamic Memory Allocation की गई हो, तो Destructor के अंदर delete Operator का उपयोग करके Memory Free की जाती है।
ऊपर दिए गए उदाहरण में Constructor द्वारा Allocate की गई Memory को Destructor Release करता है।
Destructor with Dynamic Memory Allocation
यदि Dynamic Memory Allocate करके उसे समय पर Release न किया जाए, तो Program में Memory Leak उत्पन्न हो सकता है। Destructor इस समस्या को रोकने के लिए महत्वपूर्ण भूमिका निभाता है।
इस उदाहरण में Destructor Dynamic Memory को सुरक्षित रूप से Release करता है।
Program Demonstrating Destructor
Output
Program में पहले Constructor Execute होता है। Main Function समाप्त होने पर Object Destroy होता है तथा Destructor Automatically Execute होकर Cleanup करता है।
Execution Order of Constructor and Destructor
| Stage | Executed Function |
|---|---|
| Object Creation | Constructor |
| Object Usage | Program Logic Executes |
| Object Destruction | Destructor |
Advantages of Automatic Destructor
- Memory Automatically Release होती है।
- Memory Leak की संभावना कम हो जाती है।
- Program अधिक Stable बनता है।
- Dynamic Objects का Proper Cleanup होता है।
- Programmer को Manual Cleanup नहीं करना पड़ता।
- Resource Management अधिक Efficient हो जाता है।
Calling Destructor Explicitly
सामान्यतः Destructor Automatically Execute होता है, इसलिए Programmer को इसे Explicitly Call करने की आवश्यकता नहीं होती। विशेष परिस्थितियों में Destructor को Explicit रूप से Call किया जा सकता है, लेकिन ऐसा करना सामान्य Programming Practice नहीं माना जाता क्योंकि इससे Undefined Behaviour उत्पन्न हो सकता है।
Destructor को Manual Call केवल Advanced Programming Situations में किया जाता है। सामान्य Programs में इसे Automatically Execute होने देना चाहिए।
Destructor for Dynamic Objects
जब किसी Object को new Operator की सहायता से Dynamic Memory में बनाया जाता है, तब उसका Destructor Automatically Execute नहीं होता। ऐसे Objects के लिए delete Operator का उपयोग करना आवश्यक होता है।
जैसे ही delete ptr; Execute होता है, पहले Destructor Call होता है और उसके बाद Memory Release की जाती है।
Importance of delete Operator
यदि Dynamic Object के लिए delete का उपयोग नहीं किया जाता, तो Destructor Execute नहीं होगा तथा Allocated Memory Release नहीं होगी। इससे Memory Leak उत्पन्न हो सकता है।
| Operation | Result |
|---|---|
| new | Dynamic Memory Allocate करता है। |
| delete | Destructor Call करके Memory Release करता है। |
| delete[] | Dynamic Array के सभी Objects के Destructor Execute करता है। |
Destructor for Array of Objects
यदि किसी Class के अनेक Objects Array के रूप में बनाए जाते हैं, तो Program समाप्त होने पर प्रत्येक Object का Destructor Reverse Order में Execute होता है।
ऊपर दिए गए उदाहरण में पहले s[2], फिर s[1] और अंत में s[0] का Destructor Execute होगा।
Program using Dynamic Object and Destructor
Output
Destructor Execution Order
यदि Program में अनेक Objects बनाए गए हों, तो उनके Destructors Object Creation के विपरीत क्रम (Reverse Order) में Execute होते हैं। इसे Last Created, First Destroyed (LCFD) सिद्धांत भी कहा जाता है।
↓
Object B Created
↓
Object C Created
↓
Destructor C
↓
Destructor B
↓
Destructor A
Difference between Automatic Object and Dynamic Object
| Automatic Object | Dynamic Object |
|---|---|
| Stack Memory में बनता है। | Heap Memory में बनता है। |
| Scope समाप्त होने पर Destructor Automatically Execute होता है। | delete करने पर Destructor Execute होता है। |
| Manual Memory Management आवश्यक नहीं होती। | delete द्वारा Memory Release करना आवश्यक होता है। |
Applications of Destructor
Destructor का उपयोग उन सभी परिस्थितियों में किया जाता है जहाँ Program द्वारा उपयोग किए गए Resources को Object के समाप्त होने पर Release करना आवश्यक हो। विशेष रूप से Dynamic Memory Management, File Handling तथा Database Applications में Destructor की महत्वपूर्ण भूमिका होती है।
| Application | Purpose |
|---|---|
| Dynamic Memory Management | Heap Memory को Release करना। |
| File Handling | Open Files को Automatically Close करना। |
| Database Programming | Database Connections को Release करना। |
| Network Programming | Socket एवं Network Resources को Close करना। |
| GUI Applications | Windows एवं Components की Cleanup करना। |
| Game Development | Game Objects एवं Buffers को Release करना। |
Advantages of Destructor
- Memory Leak की संभावना कम हो जाती है।
- Dynamic Memory Automatically Release होती है।
- Program अधिक Stable एवं Reliable बनता है।
- Files एवं Resources Proper तरीके से Close होते हैं।
- Resource Management सरल हो जाता है।
- Cleanup Code Automatically Execute होता है।
- Large Applications में Memory Management बेहतर होता है।
Limitations of Destructor
- Destructor का कोई Parameter नहीं हो सकता।
- Destructor को Overload नहीं किया जा सकता।
- एक Class में केवल एक Destructor होता है।
- Return Type Declare नहीं किया जा सकता।
- गलत Cleanup Logic होने पर Program Crash हो सकता है।
Best Practices for Destructor
Destructor लिखते समय कुछ महत्वपूर्ण बातों का ध्यान रखना चाहिए ताकि Program सुरक्षित तथा Efficient बना रहे।
- Destructor के अंदर केवल Cleanup Code लिखें।
- Dynamic Memory Allocate की हो तो हमेशा delete का उपयोग करें।
- Open Files को Destructor में Close करें।
- Database एवं Network Connections Release करें।
- Destructor के अंदर Exceptions Throw करने से बचें।
- Resource Allocation तथा Resource Release का संतुलन बनाए रखें।
Difference between Constructor and Destructor
| Constructor | Destructor |
|---|---|
| Object Create होने पर Execute होता है। | Object Destroy होने पर Execute होता है। |
| Object को Initialize करता है। | Object की Cleanup करता है। |
| एक से अधिक Constructors हो सकते हैं। | केवल एक Destructor होता है। |
| Parameters हो सकते हैं। | कोई Parameter नहीं होता। |
| Overloading संभव है। | Overloading संभव नहीं है। |
| Class Name के समान होता है। | Class Name से पहले ~ लगाया जाता है। |
Real Life Example of Destructor
मान लीजिए किसी Program में File Open की गई है। Program समाप्त होने पर यदि File को Close नहीं किया गया, तो Resource Leak हो सकता है। Destructor Automatically File को Close करके इस समस्या को रोकता है। इसी प्रकार Database Connection, Network Socket तथा Dynamic Memory भी Destructor द्वारा सुरक्षित रूप से Release किए जाते हैं।
Summary
Destructor C++ का एक विशेष Member Function है जिसका मुख्य उद्देश्य Object के Destroy होने पर उसकी Memory तथा अन्य Resources को Release करना होता है। Constructor Object को Initialize करता है जबकि Destructor Object की Cleanup करता है। Dynamic Memory Management, File Handling तथा Resource Management में Destructor अत्यंत महत्वपूर्ण भूमिका निभाता है।
| Concept | Description |
|---|---|
| Destructor | Object Destroy होने पर Automatically Execute होने वाला Special Member Function। |
| Destructor Name | Class Name के पहले ~ लगाकर लिखा जाता है। |
| Return Type | कोई Return Type नहीं होता। |
| Parameters | कोई Parameter स्वीकार नहीं करता। |
| Automatic Call | Object Destroy होने पर स्वतः Execute होता है। |
| Memory Release | Dynamic Memory तथा Resources को Free करता है। |
| Overloading | Destructor को Overload नहीं किया जा सकता। |
Important Viva Questions
- Destructor क्या है?
- Destructor का मुख्य कार्य क्या होता है?
- Destructor का Syntax लिखिए।
- Destructor Automatically कब Execute होता है?
- Destructor का Return Type क्यों नहीं होता?
- Destructor में Parameter क्यों नहीं होते?
- Constructor तथा Destructor में क्या अंतर है?
- Dynamic Memory Allocation में Destructor की क्या भूमिका है?
- Destructor को Overload क्यों नहीं किया जा सकता?
- Destructor तथा delete Operator का क्या संबंध है?
University Examination Important Questions
- Destructor की परिभाषा लिखिए तथा इसकी विशेषताएँ समझाइए।
- Destructor का Syntax उदाहरण सहित समझाइए।
- Constructor तथा Destructor में अंतर लिखिए।
- Destructor की आवश्यकता (Need of Destructor) समझाइए।
- Destructor की कार्यप्रणाली (Working of Destructor) उदाहरण सहित समझाइए।
- Dynamic Memory Allocation में Destructor की भूमिका स्पष्ट कीजिए।
- Destructor के Advantages एवं Limitations लिखिए।
- Automatic Object तथा Dynamic Object के Destructor में अंतर लिखिए।
- Destructor के Applications लिखिए।
- Destructor पर संक्षिप्त टिप्पणी (Short Note) लिखिए।
Exam Tips
- हमेशा याद रखें कि Destructor का नाम ~ClassName() होता है।
- Destructor का कोई Return Type एवं Parameter नहीं होता।
- एक Class में केवल एक Destructor बनाया जा सकता है।
- Destructor Automatically Execute होता है, इसे सामान्यतः Explicitly Call नहीं किया जाता।
- Dynamic Memory Allocate करने पर Destructor के अंदर delete का उपयोग करना चाहिए।
- Constructor तथा Destructor के बीच कम से कम पाँच अंतर परीक्षा में अवश्य तैयार रखें।
Conclusion
Destructor C++ Object Oriented Programming का अत्यंत महत्वपूर्ण Feature है। इसका उपयोग Object के समाप्त होने पर Memory, Files, Database Connections तथा अन्य System Resources को सुरक्षित रूप से Release करने के लिए किया जाता है। Destructor Program को Memory Leak से बचाता है तथा Resource Management को अधिक Efficient बनाता है। Dynamic Memory Allocation, File Handling, Network Programming तथा बड़े Software Projects में Destructor का व्यापक उपयोग किया जाता है। RGPV B.Tech First Year के विद्यार्थियों के लिए Destructor Theory, Practical एवं Viva तीनों दृष्टिकोण से अत्यंत महत्वपूर्ण Topic है।
Related Articles
Arrays of Objects in C++ Notes | Object Array, Declaration, Initialization & Examples | Basic Computer Engineering | RGPV BTech First Year
Arrays ...
Read More →Object as Function Argument & Returning Object from Function in C++ Notes | Pass Object to Function, Return Object & Examples | Basic Computer Engineering | RGPV BTech First Year
Object ...
Read More →Pointers to Objects in C++ Notes | Object Pointer, Accessing Members using Pointer & Examples | Basic Computer Engineering | RGPV BTech First Year
Pointer...
Read More →Dynamic Memory Allocation in C++ Notes | new & delete Operators, Heap Memory, Dynamic Objects & Examples | Basic Computer Engineering | RGPV BTech First Year
Dynamic...
Read More →this Pointer in C++ Notes | this Keyword, Uses, Advantages & Examples | Basic Computer Engineering | RGPV BTech First Year
this Po...
Read More →