Template array classes.
Files "Arrays.h" and "Arrays.cpp" implement three array template classes. Class TArray implements an array of objects of trivial types such as char, for any type done in DArray because it does not cope with element's constructors, destructors and copy operators. Although implemented as a template, which makes it possible to incorrectly use TArray with non-trivial classes, it should not be done.A lot of things is shared by these three arrays. That is why there are more base classes:
- ArrayBase defines functions independent of the elements type
- ArrayBaseT template class defining functions shared by DArray and TArray
The main difference between GArray (now obsolete) and these ones is the copy-on-demand strategy, which allows you to copy array objects without copying the real data. It's the same thing, which has been implemented in GString long ago: as long as you don't try to modify the underlying data, it may be shared between several copies of array objects. As soon as you attempt to make any changes, a private copy is created automatically and transparently for you - the procedure, that we call "copy-on-demand".
Also, please note that now there is no separate class, which does fast sorting. Both TArray (dynamic array for trivial types) and DArray (dynamic array for arbitrary types) can sort their elements.
Historical comments --- Leon chose to implement his own arrays because the STL classes were not universally available and the compilers were rarely able to deal with such a template galore. Later it became clear that there is no really good reason why arrays should be derived from containers. It was also suggested to create separate arrays implementation for simple classes and do the copy-on-demand strategy, which would allow to assign array objects without immediate copying of their elements. At this point GArray has been superseded by DArray and TArray.
Alphabetic index Hierarchy of classes