Global new : new « Development « C++ Tutorial






#include <iostream>
#include <cstdlib>
#include <new>
using namespace std;

class Point {
  int x, y;
public:
  Point() {}
  Point(int px, int py) {
    x = px;
    y = py;
  }

  void show() {
    cout << x << " ";
    cout << y << "\n";
  }
};

// Global new
void *operator new(size_t size)
{
  void *p;

  p =  malloc(size);
  if(!p) {
    bad_alloc ba;
    throw ba;
  }
  return p;
}

// Global delete
void operator delete(void *p)
{
  free(p);
}

int main()
{
  Point *p1, *p2;
  float *f;

  try {
    p1 = new Point (10, 20);
  } catch (bad_alloc xa) {
    cout << "Allocation error for p1.\n";
    return 1;;
  }

  try {
    p2 = new Point (-10, -20);
  } catch (bad_alloc xa) {
    cout << "Allocation error for p2.\n";
    return 1;;
  }

  try {
    f = new float; // uses overloaded new, too
  } catch (bad_alloc xa) {
    cout << "Allocation error for f.\n";
    return 1;;
  }

  *f = 10.10F;
  cout << *f << "\n";

  p1->show();
  p2->show();

  delete p1;
  delete p2;
  delete f;

  return 0;
}
10.1
10 20
-10 -20








5.12.new
5.12.1.Use new and delete
5.12.2.Global new
5.12.3.Initialize memory
5.12.4.Allocate an array
5.12.5.Allocate an object
5.12.6.Allocate memory for an object
5.12.7.Catch 'new' memory allocation exception
5.12.8.using new to get memory for strings
5.12.9.Allocate an array of objects by overloading new and delete operators
5.12.10.dynamically allocated objects may have constructors and destructors