// File: new2.C
//
// Testing overloaded new and delete operators

#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>

class Test {

public:
   int data ;
   Test() ;
   ~Test() ;

   void *operator new(size_t) ;
   void *operator new[](size_t) ;
   void operator delete(void *) ;
   void operator delete [] (void *) ;
} ;


Test::Test() {
   cout << "Test Constructor" << endl ;
   data = 0 ;
}

Test::~Test() {
   cout << "Test Destructor" << endl ;
}

void *Test::operator new(size_t n) {
   cout << "new: n =" << n << endl ;

   void *ptr = malloc(n) ;
   return ptr ;
}


void *Test::operator new[](size_t n) {
   cout << "new[]: n =" << n << endl ;

   void *ptr = malloc(n) ;
   return ptr ;
}


void Test::operator delete(void *ptr) {
   cout << "delete" << endl ;

   free(ptr) ;
}


void Test::operator delete[](void *ptr) {
   cout << "delete[]" << endl ;

   free(ptr) ;
}


main() {
   cout << "\n***Testing the new operators" << endl ;

   Test *ptr = new Test ;
   Test *A = new Test[10] ;

   cout << "\n***Test the delete operators" << endl ;

   delete ptr ;
   delete [] A ;
}
