Do you want to learn about Disabling the Implicit Destructor in the classes of your C++ app? Do you know what kind of methods we have that we can declare and use to disable the implicit destructor? In this post, we will try to explain how to disable the implicit destructor in Classes with given examples.
What is the Constructor in a C++ app?
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 is a destructor in a C++ app?
The Destructor in C++ app 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 { }; }; |
Disabling the implicit destructor
The Destructor can be disabled by the = delete; statement for the Implicit Destructor Declaration;
Syntax,
1 2 3 |
~class_name () = delete; |
1 2 3 |
<decl-specifier> ~class_name () = delete; |
Disabling the Implicit Destructor a destructor to be generated by the compiler,
1 2 3 4 5 |
class myclass { public: ~myclass() = delete; // Disabling The Implicit Destructor }; |
An example of disabling the implicit destructor in C++ is given below, commented lines will have errors because of disabling,
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 |
#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; } |
Design. Code. Compile. Deploy.
Start Free Trial
Free C++Builder Community Edition