Bird
Raised Fist0
C++programming~5 mins

Destructor role in C++

Choose your learning style10 modes available
Introduction

A destructor is a special function that cleans up when an object is no longer needed. It helps free resources like memory or files automatically.

When you want to close a file automatically after using it.
When you allocate memory during an object's life and want to free it safely.
When you want to release a network connection when an object is destroyed.
When you want to print a message or log when an object is removed.
When you want to avoid memory leaks by cleaning up resources.
Syntax
C++
class ClassName {
public:
    ~ClassName() {
        // cleanup code here
    }
};

The destructor has the same name as the class but starts with a tilde (~).

It has no return type and no parameters.

Examples
Basic destructor syntax inside a class.
C++
class MyClass {
public:
    ~MyClass() {
        // called automatically when object is destroyed
    }
};
Destructor closes a file automatically.
C++
#include <fstream>
class FileHandler {
public:
    ~FileHandler() {
        file.close(); // close file when object is destroyed
    }
private:
    std::fstream file;
};
Destructor frees memory allocated in constructor.
C++
class Buffer {
public:
    Buffer() { data = new int[10]; }
    ~Buffer() { delete[] data; }
private:
    int* data;
};
Sample Program

This program shows when the destructor runs. The object d is created inside a block and destroyed when the block ends.

C++
#include <iostream>

class Demo {
public:
    Demo() { std::cout << "Object created\n"; }
    ~Demo() { std::cout << "Destructor called: Object destroyed\n"; }
};

int main() {
    {
        Demo d;
        std::cout << "Inside block\n";
    } // d goes out of scope here
    std::cout << "Outside block\n";
    return 0;
}
OutputSuccess
Important Notes

Destructor runs automatically when an object goes out of scope or is deleted.

You cannot call a destructor directly; it is called by the system.

If you don't define a destructor, the compiler creates a default one that does nothing.

Summary

Destructor cleans up resources when an object is destroyed.

It has the same name as the class with a ~ prefix and no parameters.

Destructor runs automatically when an object goes out of scope or is deleted.

Practice

(1/5)
1. What is the main role of a destructor in C++?
easy
A. To clean up resources when an object is destroyed
B. To create new objects
C. To initialize variables
D. To overload operators

Solution

  1. Step 1: Understand the purpose of a destructor

    A destructor is a special function that runs when an object is destroyed to free resources like memory or files.
  2. Step 2: Compare with other options

    Creating objects, initializing variables, and overloading operators are not roles of destructors.
  3. Final Answer:

    To clean up resources when an object is destroyed -> Option A
  4. Quick Check:

    Destructor role = cleanup [OK]
Hint: Destructor always cleans up when object ends [OK]
Common Mistakes:
  • Confusing destructor with constructor
  • Thinking destructor creates objects
  • Believing destructor initializes variables
2. Which of the following is the correct syntax for a destructor in a class named Car?
easy
A. Car~() {}
B. void ~Car() {}
C. ~Car() {}
D. void Car() {}

Solution

  1. Step 1: Recall destructor syntax

    A destructor has the same name as the class with a tilde (~) prefix and no return type.
  2. Step 2: Check each option

    ~Car() {} matches the correct syntax. void ~Car() {} wrongly includes 'void'. Car~() {} has wrong order. void Car() {} lacks tilde and looks like a constructor.
  3. Final Answer:

    ~Car() {} -> Option C
  4. Quick Check:

    Destructor syntax = ~ClassName() [OK]
Hint: Destructor name = ~ + class name, no return type [OK]
Common Mistakes:
  • Adding return type to destructor
  • Placing tilde after class name
  • Confusing destructor with constructor syntax
3. What will be the output of this C++ code?
class Box {
public:
  Box() { std::cout << "Created\n"; }
  ~Box() { std::cout << "Destroyed\n"; }
};

int main() {
  Box b;
  return 0;
}
medium
A. Destroyed\nCreated\n
B. Created\nDestroyed\n
C. Created\n
D. No output

Solution

  1. Step 1: Trace object creation

    When b is created, constructor prints "Created".
  2. Step 2: Trace object destruction

    At end of main(), b is destroyed, destructor prints "Destroyed".
  3. Final Answer:

    Created\nDestroyed\n -> Option B
  4. Quick Check:

    Constructor then destructor output [OK]
Hint: Constructor runs first, destructor runs last [OK]
Common Mistakes:
  • Assuming destructor runs before constructor
  • Expecting no output
  • Confusing order of prints
4. Identify the error in this destructor code:
class Sample {
public:
  ~Sample(int x) { }
};
medium
A. Destructor cannot have parameters
B. Destructor must return int
C. Destructor name should not have ~
D. Destructor must be static

Solution

  1. Step 1: Check destructor parameters

    Destructors cannot have parameters; they must have empty parentheses.
  2. Step 2: Verify other rules

    Destructor has no return type, must have ~ prefix, and cannot be static.
  3. Final Answer:

    Destructor cannot have parameters -> Option A
  4. Quick Check:

    Destructor params = none [OK]
Hint: Destructor always has empty parentheses [OK]
Common Mistakes:
  • Adding parameters to destructor
  • Adding return type
  • Removing ~ from destructor name
5. Consider a class FileHandler that opens a file in its constructor. Which is the best way to ensure the file is closed properly when the object is no longer needed?
hard
A. Do nothing; files close automatically when program ends
B. Manually call a close method before deleting the object
C. Rely on the operating system to close the file automatically
D. Write a destructor that closes the file

Solution

  1. Step 1: Understand resource management

    Files opened by an object should be closed when the object is destroyed to avoid resource leaks.
  2. Step 2: Use destructor for cleanup

    Destructor runs automatically when object ends, so closing the file there ensures proper cleanup.
  3. Final Answer:

    Write a destructor that closes the file -> Option D
  4. Quick Check:

    Destructor cleans resources automatically [OK]
Hint: Use destructor to free resources automatically [OK]
Common Mistakes:
  • Forgetting to close files causing leaks
  • Relying on manual close calls
  • Assuming OS always cleans up immediately
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard