Mega Code Archive

 
Categories / C++ Tutorial / Development
 

Delete an array of objects

#include <iostream> #include <cstdlib> #include <new> using namespace std; class Point {   int x, y; public:   Point() {x = y = 0;}   Point(int px, int py) {     x = px;     y = py;   }   void show() {     cout << x << " ";     cout << y << "\n";   }   void *operator new(size_t size);   void operator delete(void *p);   void *operator new[](size_t size);   void operator delete[](void *p); }; // new overloaded relative to Point. void *Point::operator new(size_t size) { void *p;   cout << "In overloaded new.\n";   p =  malloc(size);   if(!p) {     bad_alloc ba;     throw ba;   }   return p; } // delete overloaded relative to Point. void Point::operator delete(void *p) {   cout << "In overloaded delete.\n";   free(p); } // new overloaded for Point arrays. void *Point::operator new[](size_t size) {   void *p;   cout << "Using overload new[].\n";   p =  malloc(size);   if(!p) {     bad_alloc ba;     throw ba;   }   return p; } // delete overloaded for Point arrays. void Point::operator delete[](void *p) {   cout << "Freeing array using overloaded delete[]\n";   free(p); } int main() {   Point *p1, *p2;   int i;   try {     p1 = new Point (10, 20); // allocate an object   } catch (bad_alloc xa) {     cout << "Allocation error for p1.\n";     return 1;;   }   try {     p2 = new Point [10]; // allocate an array   } catch (bad_alloc xa) {     cout << "Allocation error for p2.\n";     return 1;;   }   p1->show();   for(i=0; i<10; i++)     p2[i].show();   delete p1; // free an object   delete [] p2; // free an array   return 0; } In overloaded new. Using overload new[]. 10 20 0 0 In overloaded delete. Freeing array using overloaded delete[]