How to make a C++ class whose objects can only be dynamically allocated?
Last Updated :
21 Jun, 2022
The problem is to create a class such that the non-dynamic allocation of object causes compiler error. For example, create a class ‘Test’ with following rules.
CPP
Test t1;
Test *t3 = new Test;
|
The idea is to create a private destructor in the class. When we make a private destructor, the compiler would generate a compiler error for non-dynamically allocated objects because compiler need to remove them from stack segment once they are not in use. Since compiler is not responsible for deallocation of dynamically allocated objects (programmer should explicitly deallocate them), compiler won’t have any problem with them. To avoid memory leak, we create a friend function destructTest() which can be called by users of class to destroy objects.
CPP
#include <iostream>
using namespace std;
class Test
{
private :
~Test() { cout << "Destroying Object\n" ; }
public :
Test() { cout << "Object Created\n" ; }
friend void destructTest(Test* );
};
void destructTest(Test* ptr)
{
delete ptr;
cout << "Object Destroyed\n" ;
}
int main()
{
Test *ptr = new Test;
destructTest(ptr);
return 0;
}
|
Output:
Object Created
Destroying Object
Object Destroyed
Time Complexity: O(1)
Auxiliary Space: O(1)
If we don’t want to create a friend function, we can also overload delete and delete[] operators in Test, this way we don’t have to call a specific function to delete dynamically allocated objects.
Share your thoughts in the comments
Please Login to comment...