Because classes have complicated internal structures, including data and functions, object initialization and cleanup for classes is much more complicated than it is for simple data structures. Constructors and destructors are special member functions of classes that are used to construct and destroy class objects. Construction may involve memory allocation and initialization for objects. Destruction may involve cleanup and deallocation of memory for objects.Like other member functions, constructors and destructors are declared within a class declaration. They can be defined inline or external to the class declaration. Constructors can have default arguments. Unlike other member functions, constructors can have member initialization lists. The following restrictions apply to constructors and destructors:Constructors and destructors do not have return types nor can they return values.References and pointers cannot be used on constructors and destructors because their addresses cannot be taken.Constructors cannot be declared with the keyword virtual.Constructors and destructors cannot be declared static, const, or volatile.Unions cannot contain class objects that have constructors or destructors.Constructors and destructors obey the same access rules as member functions. For example, if you declare a constructor with protected access, only derived classes and friends can use it to create class objects.The compiler automatically calls constructors when defining class objects and calls destructors when class objects go out of scope. A constructor does not allocate memory for the class object its this pointer refers to, but may allocate storage for more objects than its class object refers to. If memory allocation is required for objects, constructors can explicitly call the new operator. During cleanup, a destructor may release objects allocated by the corresponding constructor. To release objects, use the delete operator.Derived classes do not inherit or overload constructors or destructors from their base classes, but they do call the constructor and destructor of base classes. Destructors can be declared with the keyword virtual.Constructors are also called when local or temporary class objects are created, and destructors are called when local or temporary objects go out of scope.You can call member functions from constructors or destructors. You can call a virtual function, either directly or indirectly, from a constructor or destructor of a class A. In this case, the function called is the one defined in A or a base class of A, but not a function overridden in any class derived from A. This avoids the possibility of accessing an unconstructed object from a constructor or destructor. The following example demonstrates this: #include <iostream>using namespace std;struct A { virtual void f() { cout << "void A::f()" << endl; } virtual void g() { cout << "void A::g()" << endl; } virtual void h() { cout << "void A::h()" << endl; }};struct B : A { virtual void f() { cout << "void B::f()" << endl; } B() { f(); g(); h(); }};struct C : B { virtual void f() { cout << "void C::f()" << endl; } virtual void g() { cout << "void C::g()" << endl; } virtual void h() { cout << "void C::h()" << endl; }};int main() { C obj;}The following is the output of the above example: void B::f()void A::g()void A::h()