C++ programming language allows both auto (or stack allocated) and dynamically allocated objects. In Java & C#, all objects must be dynamically allocated using new.
C++ supports stack allocated objects for the reason of runtime efficiency. Stack based objects are implicitly managed by C++ compiler. They are destroyed when they go out of scope and dynamically allocated objects must be manually released, using delete operator otherwise memory leak occurs.
To restrict dynamic allocation a class ‘Test’ in C++ i.e.
Test* t = new Test; // Compile time error Test t; // OK
The idea of is to keep new operator function private so that new cannot be called.
// Objects of ObjectAllocation can not be dynamically allocated class ObjectAllocation { // new operator function is private void* operator new(size_t size); int x; public: ObjectAllocation() { x = 9; cout << "Constructor is called\n"; } ~ObjectAllocation() { cout << "Destructor is executed\n"; } }; int main() { ObjectAllocation *obj=new ObjectAllocation(); // Throw a compile time error. ObjectAllocation t; // Object is allocated at compile time return 0; }