Destructors in C++

A special function that runs automatically when an object is destroyed.

Destructors in C++

Destructor C++ में class का एक special member function (विशेष सदस्य function) होता है जिसका उपयोग object के समाप्त (destroy) होने पर आवश्यक cleanup (सफाई) करने के लिए किया जाता है। Destructor object के lifetime (जीवनकाल) के अंत में automatically call होता है।

Destructor: Destructor एक special member function है जो object के destroy होने पर automatically call होता है और cleanup से संबंधित कार्य करने के लिए उपयोग किया जाता है।

Why are Destructors Used?

Program में object द्वारा उपयोग किए गए resources (संसाधनों) को release करने की आवश्यकता हो सकती है। Destructor object के समाप्त होने पर cleanup operations करने में उपयोगी होता है।

उदाहरण के लिए, यदि किसी object ने dynamically allocated memory या किसी external resource का उपयोग किया है, तो object के समाप्त होने पर उस resource को release करने की आवश्यकता हो सकती है।

Syntax of a Destructor

Destructor का नाम class के नाम के समान होता है, लेकिन उसके नाम के पहले tilde (~) symbol लगाया जाता है। इसका कोई return type नहीं होता और इसमें parameters नहीं होते।

class ClassName
{
public:
    ~ClassName()
    {
        // Cleanup statements
    }
};
याद रखें: Destructor का syntax ~ClassName() होता है।

Simple Destructor Example

निम्न program में destructor के automatic execution को समझाया गया है:

#include <iostream>
using namespace std;

class Demo
{
public:
    Demo()
    {
        cout << "Constructor Called" << endl;
    }

    ~Demo()
    {
        cout << "Destructor Called";
    }
};

int main()
{
    Demo d;

    return 0;
}
Output:
Constructor Called
Destructor Called

यहाँ object d create होने पर constructor automatically call होता है। जब main() function समाप्त होता है और object का lifetime समाप्त होता है, तब destructor automatically call होता है।

Destructor is Called Automatically

Destructor को सामान्य member function की तरह manually call करने की आवश्यकता नहीं होती। जब object का lifetime समाप्त होता है, compiler automatically destructor को call करता है।

Local object के मामले में destructor सामान्यतः उस block या function के समाप्त होने पर call होता है जिसमें object बनाया गया है।

#include <iostream>
using namespace std;

class Test
{
public:
    ~Test()
    {
        cout << "Object Destroyed";
    }
};

int main()
{
    Test t;

    cout << "Object Created" << endl;

    return 0;
}
Output:
Object Created
Object Destroyed

Characteristics of a Destructor

Destructor की कुछ महत्वपूर्ण विशेषताएँ निम्नलिखित हैं:

  • Destructor का नाम class के नाम के समान होता है, लेकिन उसके पहले ~ symbol होता है।
  • Destructor का कोई return type नहीं होता।
  • Destructor कोई parameter accept नहीं करता।
  • एक class में केवल एक destructor हो सकता है।
  • Destructor object के lifetime के अंत में automatically call होता है।
  • Destructor का उपयोग cleanup और resource release से संबंधित कार्यों के लिए किया जाता है।
  • Destructor को overload नहीं किया जा सकता।

Constructor and Destructor

Constructor और destructor दोनों class के special member functions हैं, लेकिन दोनों का कार्य अलग-अलग होता है। Constructor object को initialize करता है, जबकि destructor object के समाप्त होने पर cleanup करता है।

Constructor Destructor
Object को initialize करता है। Object के समाप्त होने पर cleanup करता है।
Object creation के समय call होता है। Object destruction के समय call होता है।
Class के नाम के समान नाम होता है। Class name से पहले ~ symbol होता है।
Parameters हो सकते हैं। Parameters नहीं होते।
एक class में multiple constructors हो सकते हैं। एक class में केवल एक destructor हो सकता है।
Constructor overload किया जा सकता है। Destructor overload नहीं किया जा सकता।

Destructor with Multiple Objects

यदि एक scope में multiple objects बनाए जाते हैं, तो उनके destructors object destruction के समय automatically call होते हैं। Local objects के लिए destruction सामान्यतः creation के उल्टे क्रम में होता है।

#include <iostream>
using namespace std;

class Demo
{
    int id;

public:
    Demo(int n)
    {
        id = n;
        cout << "Object " << id << " Created" << endl;
    }

    ~Demo()
    {
        cout << "Object " << id << " Destroyed" << endl;
    }
};

int main()
{
    Demo d1(1);
    Demo d2(2);
    Demo d3(3);

    return 0;
}
Output:
Object 1 Created
Object 2 Created
Object 3 Created
Object 3 Destroyed
Object 2 Destroyed
Object 1 Destroyed

यहाँ objects d1, d2 और d3 इसी क्रम में create हुए हैं, लेकिन local objects के destructors reverse order में call हुए—पहले d3, फिर d2 और अंत में d1।

Destructor and Dynamic Memory

C++ में new operator की सहायता से dynamically memory allocate की जा सकती है। ऐसी memory को बाद में delete operator की सहायता से release करना आवश्यक होता है। Destructor में cleanup से संबंधित कार्य किया जा सकता है।

#include <iostream>
using namespace std;

class Number
{
    int *ptr;

public:
    Number()
    {
        ptr = new int;
        *ptr = 100;

        cout << "Value: " << *ptr << endl;
    }

    ~Number()
    {
        delete ptr;
        cout << "Memory Released";
    }
};

int main()
{
    Number n;

    return 0;
}
Output:
Value: 100
Memory Released

इस example में constructor dynamically memory allocate करता है और destructor object के समाप्त होने पर delete के माध्यम से उस memory को release करता है।

Important: Modern C++ में resources को manage करने के लिए standard library के resource-management techniques को प्राथमिकता दी जाती है। फिर भी destructor की अवधारणा C++ के Object-Oriented Programming में महत्वपूर्ण है।

Destructor and Scope

किसी local object का lifetime उसके scope से जुड़ा होता है। जब program execution उस scope से बाहर निकलता है, तो object destroy होता है और उसका destructor automatically call होता है।

#include <iostream>
using namespace std;

class Demo
{
public:
    Demo()
    {
        cout << "Created" << endl;
    }

    ~Demo()
    {
        cout << "Destroyed" << endl;
    }
};

void test()
{
    Demo d;

    cout << "Inside Function" << endl;
}

int main()
{
    test();

    cout << "Back to Main";

    return 0;
}
Output:
Created
Inside Function
Destroyed
Back to Main

जब test() function समाप्त होता है, तब उसका local object d scope से बाहर हो जाता है और destructor automatically call होता है।

Destructor with Dynamic Object

यदि object को new operator से dynamically create किया जाता है, तो object को destroy करने के लिए delete operator का उपयोग किया जाता है। इसके साथ destructor भी call होता है।

#include <iostream>
using namespace std;

class Demo
{
public:
    Demo()
    {
        cout << "Constructor" << endl;
    }

    ~Demo()
    {
        cout << "Destructor" << endl;
    }
};

int main()
{
    Demo *d = new Demo();

    delete d;

    return 0;
}
Output:
Constructor
Destructor

यहाँ object dynamically create किया गया है। delete d; statement object को destroy करता है और destructor automatically call होता है।

Can a Destructor Have Parameters?

नहीं। Destructor में parameters नहीं हो सकते। इसका कारण यह है कि destructor object destruction के समय automatically call होता है और इसके लिए अलग-अलग parameter lists की आवश्यकता नहीं होती।

class Demo
{
public:
    ~Demo()
    {
        // Valid destructor
    }
};

ऊपर दिया गया destructor valid है क्योंकि इसमें कोई parameter नहीं है।

Can Destructors Be Overloaded?

नहीं। एक class में केवल एक destructor हो सकता है और destructor को overload नहीं किया जा सकता। इसका कारण यह है कि destructor का कोई parameter नहीं होता, इसलिए अलग-अलग destructor versions बनाना संभव नहीं है।

Destructor Defined Outside the Class

Destructor को class के बाहर भी define किया जा सकता है। इसके लिए scope resolution operator :: का उपयोग किया जाता है।

#include <iostream>
using namespace std;

class Demo
{
public:
    Demo();

    ~Demo();
};

Demo::Demo()
{
    cout << "Constructor" << endl;
}

Demo::~Demo()
{
    cout << "Destructor";
}

int main()
{
    Demo d;

    return 0;
}
Output:
Constructor
Destructor

यहाँ constructor और destructor दोनों को class के बाहर define किया गया है। Demo::~Demo() destructor की definition है।

Important Points

  • Destructor class का special member function है।
  • Destructor का नाम class के नाम के पहले ~ symbol के साथ लिखा जाता है।
  • Destructor का कोई return type नहीं होता।
  • Destructor कोई parameter accept नहीं करता।
  • Destructor object के destroy होने पर automatically call होता है।
  • Destructor का उपयोग cleanup और resource release के लिए किया जाता है।
  • एक class में केवल एक destructor हो सकता है।
  • Destructor को overload नहीं किया जा सकता।
  • Local objects के destructors सामान्यतः reverse order में call होते हैं।
  • Dynamic object को delete करने पर उसका destructor call होता है।
  • Destructor को class के बाहर भी define किया जा सकता है।

Board Focus

Exam के लिए याद रखें:
Destructor → Special member function
Syntax → ~ClassName()
Return Type → कोई नहीं
Parameters → कोई नहीं
Purpose → Cleanup / Resource Release
Automatic Call → Object destruction के समय
Overloading → संभव नहीं
Multiple Destructors → एक class में केवल एक
Dynamic Object → delete करने पर destructor call होता है

Board Important Questions

Very Short Answer Questions

Q1. Destructor क्या है?

Answer: Destructor class का special member function है जो object के destroy होने पर automatically call होता है और cleanup के लिए उपयोग किया जाता है।

Q2. Destructor का syntax क्या है?

Answer: Destructor का syntax ~ClassName() होता है।

Q3. Destructor के नाम से पहले कौन-सा symbol लगाया जाता है?

Answer: Tilde (~) symbol.

Q4. क्या destructor का return type होता है?

Answer: नहीं, destructor का कोई return type नहीं होता।

Q5. क्या destructor parameters accept कर सकता है?

Answer: नहीं, destructor कोई parameter accept नहीं करता।

Q6. Destructor कब automatically call होता है?

Answer: Object का lifetime समाप्त होने पर destructor automatically call होता है।

Q7. क्या destructor को overload किया जा सकता है?

Answer: नहीं, destructor को overload नहीं किया जा सकता।

Short Answer Questions

Q8. Destructor की मुख्य विशेषताएँ लिखिए।

Answer: Destructor का नाम class के नाम के पहले ~ symbol लगाकर बनाया जाता है। इसका कोई return type और parameter नहीं होता। यह object के destroy होने पर automatically call होता है और cleanup तथा resource release के लिए उपयोग किया जाता है।

Q9. Constructor और Destructor में अंतर बताइए।

Constructor Destructor
Object को initialize करता है। Object के destruction पर cleanup करता है।
Object creation पर call होता है। Object destruction पर call होता है।
Class name के समान नाम होता है। Class name से पहले ~ लगाया जाता है।
Parameters हो सकते हैं। Parameters नहीं हो सकते।
Overload किया जा सकता है। Overload नहीं किया जा सकता।

Q10. Destructor का उपयोग क्यों किया जाता है?

Answer: Destructor का उपयोग object के समाप्त होने पर cleanup operations करने और आवश्यकता पड़ने पर dynamically allocated memory या अन्य resources को release करने के लिए किया जाता है।

Q11. क्या एक class में multiple destructors हो सकते हैं?

Answer: नहीं। एक class में केवल एक destructor हो सकता है क्योंकि destructor में parameters नहीं होते और इसे overload नहीं किया जा सकता।

Q12. Dynamic object के साथ destructor कब call होता है?

Answer: Dynamic object को delete operator से destroy करने पर उसका destructor automatically call होता है।

Long Answer Questions

Q13. Destructor को उदाहरण सहित समझाइए।

Answer: Destructor C++ में class का special member function है जो object के destroy होने पर automatically call होता है। इसका नाम class के नाम के समान होता है और इसके पहले tilde (~) लगाया जाता है। Destructor का कोई return type और parameter नहीं होता। इसका उपयोग cleanup और resource release के लिए किया जाता है।

#include <iostream>
using namespace std;

class Demo
{
public:
    Demo()
    {
        cout << "Constructor Called" << endl;
    }

    ~Demo()
    {
        cout << "Destructor Called";
    }
};

int main()
{
    Demo d;

    return 0;
}
Output:
Constructor Called
Destructor Called

Object d create होने पर constructor call होता है और main() समाप्त होने पर object destroy होने के कारण destructor automatically call होता है।

Q14. Multiple objects के साथ destructor के execution को उदाहरण सहित समझाइए।

#include <iostream>
using namespace std;

class Demo
{
    int id;

public:
    Demo(int n)
    {
        id = n;
        cout << "Created " << id << endl;
    }

    ~Demo()
    {
        cout << "Destroyed " << id << endl;
    }
};

int main()
{
    Demo d1(1);
    Demo d2(2);

    return 0;
}
Output:
Created 1
Created 2
Destroyed 2
Destroyed 1

यहाँ objects d1 और d2 creation के क्रम में बनाए गए हैं। Local objects के destructors destruction के समय reverse order में call होते हैं।

Q15. Destructor का उपयोग dynamic memory release करने में कैसे किया जा सकता है?

#include <iostream>
using namespace std;

class Demo
{
    int *ptr;

public:
    Demo()
    {
        ptr = new int;
        *ptr = 50;
    }

    ~Demo()
    {
        delete ptr;
        cout << "Memory Released";
    }
};

int main()
{
    Demo d;

    return 0;
}
Output:
Memory Released

इस program में constructor dynamically memory allocate करता है और destructor object के समाप्त होने पर उस memory को release करता है।

Q16. Destructor को class के बाहर define करने का program लिखिए।

#include <iostream>
using namespace std;

class Demo
{
public:
    ~Demo();
};

Demo::~Demo()
{
    cout << "Destructor Called";
}

int main()
{
    Demo d;

    return 0;
}
Output:
Destructor Called

यहाँ destructor का declaration class के अंदर और definition class के बाहर दी गई है। Destructor की बाहर definition में Demo::~Demo() का उपयोग किया गया है।

Quick Revision

  • Destructor: Object destruction पर cleanup करने वाला special member function
  • Syntax: ~ClassName()
  • Return Type: कोई नहीं
  • Parameters: कोई नहीं
  • Automatic Call: Object के lifetime के अंत में
  • Purpose: Cleanup और resource release
  • Overloading: संभव नहीं
  • Multiple Destructors: केवल एक destructor
  • Dynamic Object: delete करने पर destructor call होता है
One-Line Revision: Destructor C++ class का special member function है जो object के lifetime समाप्त होने पर automatically call होकर cleanup और resource release से संबंधित कार्य करता है।

Practice Questions

  1. Destructor क्या है?
  2. Destructor की मुख्य विशेषताएँ लिखिए।
  3. Destructor का syntax लिखिए।
  4. Destructor के नाम के पहले कौन-सा symbol लगाया जाता है?
  5. Destructor और Constructor में अंतर बताइए।
  6. क्या destructor parameters accept कर सकता है?
  7. क्या destructor को overload किया जा सकता है?
  8. Destructor का उपयोग क्यों किया जाता है?
  9. Multiple objects के साथ destructor के execution को program द्वारा समझाइए।
  10. Dynamic memory को release करने के लिए destructor का उपयोग करने वाला C++ program लिखिए।
  11. Destructor को class के बाहर define करने का program लिखिए।
  12. Dynamic object को delete करने पर destructor कैसे call होता है? उदाहरण सहित समझाइए।
  13. Constructor और Destructor के बीच कम-से-कम चार अंतर लिखिए।
Lesson 9 of 37
On This Page