Na ile to co stworzyłem przypomina std::vector z STLa?
STL stosuje pewne konwencje, dzięki którym ze wszystkich kontenerów korzysta się podobnie, i ładnie się wszystko integruje.
Nie jest jednak łatwo zachować kompatybilność z STL-em, więc może na razie udawanie STL-a odłóż.
A jak inaczej powiększyć tablicę jeżeli nie realokować?
Realokować, ale nie za każdym razem. Najczęściej robi się tak, że gdy brakuje miejsca, powiększa się kontener dwukrotnie.
Taki nadmiar może przerażać, ale dzięki temu im większy kontener (a więc więcej danych do skopiowania) tym rzadsza jest relokacja.
Potrzebujesz więc dwóch „rozmiarów”: ilość elementów w kontenerze i ilość miejsca.
Szybko też dojdziesz do wniosku, że new
-copy
-delete
elementów to zła droga, bo jeżeli klasa którą będziesz chciał trzymać w kontenerze będzie miała konstruktora i destruktora, to będą się radośnie wykonywać za każdą relokacją danych – a jeśli to będzie klasa reprezentująca otwarty plik, albo połączenie z bazą danych, to będzie bardzo źle.
Dlatego lepsze będzie malloc, realloc i free, oraz ręczne wywoływanie konstruktora i destruktora (poczytaj o placement new) tylko podczas dodawania i usuwania elementu.