When you construct an object in C++ software, sometimes you need operations to deconstruct. Destructors not only used in classes but also used with struct and union data types. Do you want to learn what is Defaulted Destructor or what is Forcing a Destructor or what kind of methods we have that we can declare and use a virtual destructor? In this post, we will try to explain how to force a Destructor in Classes with given examples.
What does a Constructor mean in C++ software?
The Constructor in C++ is a function, a method in the class, but it is a ‘special method’ that is automatically called when an object of a class is created. We don’t need to call this function. Whenever a new object of a class is created, the Constructor allows the class to initialize member variables or allocate storage. This is why the name Constructor is given to this special method. Here is a simple constructor class example below,
1 2 3 4 5 6 7 8 9 10 |
class myclass { public: myclass() { std::cout << "myclass is constructed!\n"; }; }; |
What does a Destructor mean in C++ software?
The Destructor in classes (i.e class_name) is a special member function to delete objects, in other terms it is called when the lifetime of an object ends. The purpose of the destructor is to do operations when destruct the object. The object may have acquired or allocated data on memory on runtime, they need to be freed too when objects are being deleted, destructor is the function that frees the resources of the object. When we construct an object, sometimes we need operations to deconstruct. Destructors are not only used in classes but also used with struct and union data types.
1 2 3 4 5 6 7 8 9 10 |
class myclass { public: ~myclass() // Destructor { }; }; |
Forcing a destructor and the defaulted destructor in C++ software
Defaulted destructors can be declared with = default; term at the end that means it is forcing a destructor to be generated by the compiler.
Syntax,
1 2 3 |
~class_name () = default; |
1 2 3 |
<decl-specifier> ~ class_name () = default; |
Forcing a destructor to be generated by the compiler,
1 2 3 4 5 6 7 |
class myclass { public: ~myclass() = default; // Defaulted Destructor, Forcing Destructor }; |
This example below about to Forcing (Defaulted) Destructor in C++,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <iostream> #include <string> class myclass { public: ~myclass() = delete; // Destructor }; class myotherclass : public myclass { public: std::string* s; myotherclass(const std::string str) // Constructor, ERROR: '~myclass' has been explicitly marked deleted here { s = new std::string(str); }; ~myotherclass() // Destructor, ERROR: '~myclass' has been explicitly marked deleted here { } }; int main() { myotherclass class1("Hello"); std::cout << static_cast<const std::string >( *class1.s) << '\n' ; getchar(); return 0; } |