For objects in the heap, we usually use new/delete to create/destroy objects. When new is called, it automatically calls the constructor of the corresponding class. Similarly, when delete is called, it automatically calls the corresponding class destructor. When we generate objects in the stack, the process described above is automatically completed. That is, we do not need to explicitly call new/delete. The premise is that the class construction/destructor are all public.
However, how can we implement it when we want to prohibit the generation of objects in the stack?
Will the constructor be set to private rows? No! In this way, objects cannot be generated in stacks, but they cannot be generated in stacks.
Do I set the destructor to private rows? Bad! In this way, although stack objects are restricted, inheritance is also restricted.
Set the destructor to the protected row? Yes!
For example:
Class
{
Protected:
A (){}
~ A (){}
Public:
Static A * create ()
{Return new A (); // call the protected constructor}
Void destroy ()
{Delete this; // call the protected destructor}
};
We can use it like this:
A * pa = A: create ();
Pa-> destroy ();
From: huzzyy's column