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:
Placement new is used to invoke the constructor for an object that *you* supply the memory for at runtime ...
[EDIT] Modified 31 May 2012 to add arrays.
// 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.