Ręczne zwalnianie pamięci na końcu maina też nie jest dobrym rozwiązaniem. Jeśli trakcie poleci nieobsłużony wyjątek, to delete nie zostanie zawołane z wszystkimi wspomnianymi wcześniej konsekwencjami.
Przy zmienianiu programu, też nie wygodnie pamiętać konieczności dokonania modyfikacji w dwóch miejscach, zwłaszcza jeśli uznamy, że tą niepotrzebną/nadmiarową końcówkę ze zwalnianiem poprawimy jak już reszta zacznie działać:)
Typowo do trzymania obiektów na stercie lepiej używać inteligentnych wskaźników, a do obsługi tablic o nieznanej z góry wielkości std::vector.