New; delete; pure virtual functions...

.... were added in Arduino 1.0. From new.h:

#include <stdlib.h>

void * operator new(size_t size);
void operator delete(void * ptr); 

__extension__ typedef int __guard __attribute__((mode (__DI__)));

extern "C" int __cxa_guard_acquire(__guard *);
extern "C" void __cxa_guard_release (__guard *);
extern "C" void __cxa_guard_abort (__guard *); 

extern "C" void __cxa_pure_virtual(void);

I'm curious...

  • Is this documented anywhere?
  • Why do the functions have to be declared as extern "C"? Something to do with function name hashing?

Seeing as how you have only 2K of RAM for Variables and Stack I don't think it would really be all that useful in the Arduino environment anyway...

To the contrary... I have a model railroad control system where new trains can appear on the layout at any time, and two different kinds of trains that require entirely different functions for the Arduino to control their speeds. Creating a new object dynamically that implements a virtual speed control function is perfect for this application.

Besides, it's a Mega with 8k of RAM... plenty for creating a small number of small objects.