Implementing new and delete

Posted by Nick Gammon on Sat 13 Aug 2011 04:25 AM — 1 posts, 5,663 views.

Australia Forum Administrator #0
I keep forgetting how to do a new/delete sequence on platforms that don't have it inbuilt (like the Arduino) so I'll document it right here:


// new
inline void * operator new (size_t size) { return malloc (size); }
// placement new
void * operator new (size_t size, void * ptr) { return ptr; }
// delete
void operator delete (void * ptr) { free (ptr); }

// new array
void * operator new [] (size_t size) { return malloc (size); }
// placement new array
void * operator new [] (size_t size, void * ptr) { return ptr; }
// delete array
void operator delete [] (void * ptr) { free (ptr); } 


Placement new is used to invoke the constructor for an object that *you* supply the memory for at runtime ...


char buffer [sizeof (MyClass)];
MyClass *instance;

void init() 
  {
  // call constructor using supplied memory
  instance = new (buffer) MyClass ();

  ...  


  // call destructor if necessary
  instance->~MyClass();  
  }


[EDIT] Modified 31 May 2012 to add arrays.