# TicTacToeDemo review
1. Нет реализации и не используется.

2. При взаимодействии с ObjectFac необходимо всегда делать проверку есть ли такой ресурс (проверка указателя на nullptr). У нас в проекте зачастую мы используем макрос VLIB_ASSERT при конфигурации чего-либо.




3. Тут лучше проверять на валидность указателя через if

Для таких случаев лучше всего:
- создать поле класса каунтера
- инициализировать его, обращаясь к ObjectFac
- проверить успешность инициализации через VLIB_ASSERT
- в коде обращаться уже непосредственно к полю класса, проверяя валидность указателя через if
4. Стоит избегать "магических" чисел, заменять на именованные constexpr константы. Если используются 1 раз - то внутри функции, если 2 и больше раз, то в анонимном неймспейсе в cpp файле.

5. Для чего это?

можно присвоить nullptr и обеспечить корректный релиз, если это нужно
6. Лучше использовать std::array 
А в перспективе для игр - vector, так как мы стремимся к повторному использованию кода и с динамической памятью проще делать адаптивную архитектуру. Но это так, на будущее, в первой игре нужно будет сделать все максимально просто, главное - понять основные принципы.
7. Тут можно применить паттерн Стратегия

8. Логику обработки комбинаций также лучше вынести в отдельную сущность и использовать композицию.
Форматирование
-------------
1.Необходимо контролировать отступы и не жалеть скобочек. Очень важна читаемость кода.




2. Длина строк. У нас нет четкого ограничения, но нужно стараться, чтобы строка вмещалась в область видимости основного поля.
