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 से संबंधित प्रश्न नियमित रूप से पूछे जाते हैं।

Object Created



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 करने के लिए किया जाता है।

class Student { public: ~Student() { cout << "Destructor Called"; } };

ऊपर दिए गए उदाहरण में ~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 नीचे दी गई है।

class ClassName { public: ~ClassName() { // Cleanup Code } };

यहाँ ~ClassName() Destructor है जो Object Destroy होने पर Execute होगा।


Working of Destructor

Program Starts



Object Created



Constructor Executes



Program Executes



Object Destroyed



Destructor Executes

जब Object का Scope समाप्त हो जाता है अथवा Program समाप्त होता है, तब Destructor Automatically Execute होकर Memory एवं अन्य Resources को Release करता है।


Basic Example of Destructor

#include<iostream> using namespace std; class Student { public: Student() { cout << "Constructor Called" << endl; } ~Student() { cout << "Destructor Called"; } }; int main() { Student s1; return 0; }

Output

Constructor Called Destructor Called

ऊपर दिए गए 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 बनता है।

Object Created



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 की जाती है।

class Student { int *marks; public: Student() { marks = new int; } ~Student() { delete marks; } };

ऊपर दिए गए उदाहरण में Constructor द्वारा Allocate की गई Memory को Destructor Release करता है।


Destructor with Dynamic Memory Allocation

यदि Dynamic Memory Allocate करके उसे समय पर Release न किया जाए, तो Program में Memory Leak उत्पन्न हो सकता है। Destructor इस समस्या को रोकने के लिए महत्वपूर्ण भूमिका निभाता है।

#include<iostream> using namespace std; class Demo { int *ptr; public: Demo() { ptr = new int; *ptr = 500; } ~Demo() { delete ptr; cout << "Memory Released"; } };

इस उदाहरण में Destructor Dynamic Memory को सुरक्षित रूप से Release करता है।


Program Demonstrating Destructor

#include<iostream> using namespace std; class Test { public: Test() { cout << "Constructor Executed" << endl; } ~Test() { cout << "Destructor Executed"; } }; int main() { Test t1; cout << "Inside Main Function" << endl; return 0; }

Output

Constructor Executed Inside Main Function Destructor Executed

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 उत्पन्न हो सकता है।

obj.~Student();

Destructor को Manual Call केवल Advanced Programming Situations में किया जाता है। सामान्य Programs में इसे Automatically Execute होने देना चाहिए।


Destructor for Dynamic Objects

जब किसी Object को new Operator की सहायता से Dynamic Memory में बनाया जाता है, तब उसका Destructor Automatically Execute नहीं होता। ऐसे Objects के लिए delete Operator का उपयोग करना आवश्यक होता है।

Student *ptr = new Student(); delete ptr;

जैसे ही 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 होता है।

Student s[3];

ऊपर दिए गए उदाहरण में पहले s[2], फिर s[1] और अंत में s[0] का Destructor Execute होगा।


Program using Dynamic Object and Destructor

#include<iostream> using namespace std; class Demo { public: Demo() { cout << "Constructor" << endl; } ~Demo() { cout << "Destructor"; } }; int main() { Demo *ptr = new Demo(); delete ptr; return 0; }

Output

Constructor Destructor

Destructor Execution Order

यदि Program में अनेक Objects बनाए गए हों, तो उनके Destructors Object Creation के विपरीत क्रम (Reverse Order) में Execute होते हैं। इसे Last Created, First Destroyed (LCFD) सिद्धांत भी कहा जाता है।

Object A Created



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

  1. Destructor क्या है?
  2. Destructor का मुख्य कार्य क्या होता है?
  3. Destructor का Syntax लिखिए।
  4. Destructor Automatically कब Execute होता है?
  5. Destructor का Return Type क्यों नहीं होता?
  6. Destructor में Parameter क्यों नहीं होते?
  7. Constructor तथा Destructor में क्या अंतर है?
  8. Dynamic Memory Allocation में Destructor की क्या भूमिका है?
  9. Destructor को Overload क्यों नहीं किया जा सकता?
  10. Destructor तथा delete Operator का क्या संबंध है?

University Examination Important Questions

  1. Destructor की परिभाषा लिखिए तथा इसकी विशेषताएँ समझाइए।
  2. Destructor का Syntax उदाहरण सहित समझाइए।
  3. Constructor तथा Destructor में अंतर लिखिए।
  4. Destructor की आवश्यकता (Need of Destructor) समझाइए।
  5. Destructor की कार्यप्रणाली (Working of Destructor) उदाहरण सहित समझाइए।
  6. Dynamic Memory Allocation में Destructor की भूमिका स्पष्ट कीजिए।
  7. Destructor के Advantages एवं Limitations लिखिए।
  8. Automatic Object तथा Dynamic Object के Destructor में अंतर लिखिए।
  9. Destructor के Applications लिखिए।
  10. 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 →