есть класс- обертка, который использую уже конкретно в экторах. В нем содержится static объект и методы вызывающие методы объекта.
Один из методов Add(...) .Он вызывает Add(...) у static объекта, там оператором new создается несколько объектов, если данные объекты уже были созданы, то ничего не делается. Один из создаваемых объектов поток( наследник от FRunnable). Ну и естественно деструктор у статик объекта оператором delete высвобождает память.
В уже собранном проекте пока особо проблем не заметил, вижу что память освобождается чуть ли не самой последней для статика. Примерно тогда, когда в диспетчер исчезает процесс. Грубое завершение процесса тоже проблем особо не создало, но может мало тестировал.
А вот в едиторе проблемы были. Просто закрыв проект, процесс очень долго висит в диспетчере, я так и не дождался его завершения. Память не очищается( видно по внешнему устройству, очистка памяти означала бы его отключение). При дебаге наблюдал что процесс зашел в деструктор объекта( из членов статик объекта, объект отвечающий за взаимодействие с внешним устройством) и просто от туда не выходит. Тот же самый объект ток вне статик обьекта прекрасно уничтожался. Пару раз при грубом завершении режима отладки, ловил один из вариантов синего экрана смерти, так как созданный поток не был убит, а на это место у операционки уже видно были планы.
Пробовал делать счетчик пользователей (+1 при каждом конструировании класса обертки, -1 и проверка на 0 при каждом деструкторе класса обертки, при 0 - очистка памяти) результат не изменился.
С аварийными завершениями программ пока не работал, что и где можно почитать по этой теме?
Или это особенности работы в едиторе вызывают такую ситуацию и просто так это не лечится?
Если внешнее устройство попытаться подключить повторно, то ничего не должно получится, в случае едитора оно как запустилось так и работает, включай снова, выключай... информация передается корректно, соответственно статик объект не разрушается при завершении симуляции. Едитор запускает конструкторы класса при загрузки проекта, часть классов строится в BeginPlay() объектов. При завершении симуляции как освободить динамически выделенную память?