Try to use some more advanced C++ techniques to make our code more concise, more robust, and easier to maintain.
some form of auto_ptr, scoped_ptr or similar
for vanilla C++ new/delete and new[]/delete[]
for uprv_malloc()/uprv_free()
for ICU C service objects with uxyz_close()
(this version should be public API to make life easier for our users)
see also Taligent's Safe Pointers
C++ class for stack array objects with fixed size that's not necessarily known at compile time
real char* string class rather than uprv_strcpy(), udata.c's TinyString, etc.
cannot just use STL string because we need to route memory allocation
through ICU's functions
LocalPointer & LocalArray & LocalUConverterPointer etc. implemented with ticket #7245, to be tested and used better with ticket #7247 (which will also add an internal version for uprv_malloc()/uprv_free()).
That leaves the stack array class (combine with the LocalMemory/uprv_malloc() class??) and the char* string class.
Stack array class also done with ticket #7247.
Commits here were only for temporary test code to see if all relevant compilers support templates. That test code was removed while I worked on real LocalPointer, MaybeStackArray etc. with other tickets. I just submitted ticket #7496 (add internal char * string class for C++ implementation code) for the remaining piece of work so that this ticket can be reviewed for ICU 4.4.