На самом деле вам не нужно явно выделять и освобождать память.Все, что вам нужно, - это правильная структура данных для задания.
В вашем случае std :: vector или std :: list могут выполнять работу очень хорошо
Использование std :: vector в целомкод может быть заменен на
auto t = std::vector<TicTacNode>(nodenum)
или с использованием std :: list
auto t = std::list<TicTacNode>(nodenum)
Преимущества :
Меньшеи чистый код.
Нет необходимости в std :: new, поскольку оба контейнера будут выделять и инициализировать узлы объектов.
Нет необходимости в std :: delete, поскольку контейнеры автоматически освобождают память приони выходят за рамки.