@Ufnah Прошу помощи! У меня есть статический инстанс класса UQuestProcessor* и

есть статический метод GetQuestProcessor(), который создает этот инстанс, если он нулевой указатель либо просто его возвращает. С недавнего времени я начал замечать, что его поедает Garbage Collector, потому что я отключал сборщик в настройках и все нормально, если включить, то мой инстанс удаляется.

Вчера я задал это вопрос в этот чат и мне порекомендовали унаследоваться от FGCObject и заоверрайдить метод AddReferencedObjects(), я попробовал это сделать, но у меня выскакивает ошибка компиляции. В интернете я вычитал, что можно сделать UQuestProcessor->AddToRoot() и действительно, несколько минут игра идет нормально, а потом все равно вылетает, то есть и это не выход.

Пометить мой инстанс как UPROPERTY я не могу, ибо он статический и мне IDE не дает этого сделать. Также переписать архитектуру под нестатический инстанс и метод я не могу, ибо на этой штуке выстроена вся архитектура модуля. У меня больше нет вариантов, что делать, как спасти мой инстанс от сборщика мусора?

Заранее спасибо

P.S. Он наследуется от UObject.

5 ответов

24 просмотра

Синглтоны это изобретение сатаны чтобы отвратить добрых людей от слова божьего! AddToRoot адекватный способ избежать гц. Нужно смотреть почему игра валится, там же дебаггер должен показывать что произошло Могу предположить что перед где-то происходит перезапуск игры в редакторе, когда пересоздается гейм инстанс и весь мир. Синглтон тогда может иметь ссылки на умершие объекты ПС. Никогда не поздно отвергнуть бесовскую заразу и сделать как во многих плагинах анрила типа online subsystem

Sarmat- Автор вопроса
Sarmat
а как такое реализовано в online subsystem?

Там сам модуль хранит инстансы, а доступ к модулю идет через модульный менеджер

1. Делать статические переменные-юобжекты - зло, лучше отрефакторить над сабсистему или что-то sibgleton-alike (зачем переменной быть статик, если у тебя накрайгяк может быть таким геттер?) 2. Добавление в рут - совершенно нормально. Если это не помогает, то дело не в бобине и надо искать кто конкретно все портит. 3. Статические переменные и прочее - это вдвойне ужас, если ты тестишь в редакторе. Потому что статика будет держать ссылки на объекты которых нет после первого же плея (да даже cdo уже может тебе все испортить)

Тебя ещё тогда повели в неправильную сторону, и теперь ты только ещё больше запутался. Есть вариант хранить его как простое поле в гейммоде, есть вариант сделать game instance subsystem, ещё что-то. Продолжать рисовать этот невнятный синглтон и пытаться на него подвесить GC это больно, слишком сложно для такой простой задачи, и просто не нужно

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта