What Nick said, a small fix to free() would do wonders for use of the String class.
Just plain 'strings' aren't a problem at all. It's the Strings that trip so many people up.
Using char * rather than String forces the programmer to handle string lifecycles and memory allocation, and the programmer usually knows how the program is mean to run and when a char array can be reused.
It forces an MCU programmer to know about the hardware which is blasphemy to purist comp-sci dweebs. How many programmers does it take to change a light bulb? Can't be done, it's a hardware problem!