if you understand c++ you will know about constructor and destructor. If you dont now you do. 

Contructor you can think as Creator or God
Destructor you can think as destructor or Evil, devil..

but both are required so the system or program works. :)

If you are interested in C++ destructor and constructor here is some info by AIIA:







What are constructor and destructor in c++?

In C++, a **constructor** is a special member function of a class that is used to initialize objects when they are created. It has the same name as the 
class, and it does not have any return type (not even `void`). The purpose of a constructor is to set the initial state of an object by initializing its 
data members.

Here's an example:
cpp
class Person { public:     Person(std::string name) : name_(name) {} private:     std::string name_; }; int main() {     Person p("John");     return 0; }

In this example, the `Person` constructor takes a `std::string` parameter `name`, and it initializes the `name_` data member of the object with that 
value.

A **destructor**, on the other hand, is a special member function of a class that is used to release any resources allocated by an object when it is 
destroyed. It has the same name as the class preceded by a tilde (`~`). The purpose of a destructor is to clean up after an object and free any 
resources it may have allocated.

Here's an example:
cpp
class File { public:     File(const std::string& filename) : file_(new std::ifstream(filename)) {}     ~File() { delete file_; } private:     std::ifstream* file_; }; int main() {     File f("example.txt");     return 0; }

In this example, the `File` destructor deletes the `file_` object when an instance of the class is destroyed.

Some key points about constructors and destructors:

1. **Constructors are used to initialize objects**, while destructors are used to release resources.
2. **Constructors do not have a return type**, while destructors have the same name as the class preceded by a tilde (`~`).
3. **Constructors can be overloaded** (i.e., multiple constructors with different parameters), but they must all have the same name as the class.
4. **Destructors cannot be overloaded**, and there is only one destructor per class.

It's worth noting that C++11 introduced a new feature called **move semantics**, which allows classes to define special member functions for moving 
resources between objects, rather than copying them. This can lead to more efficient use of resources in certain situations.