Вопрос

Хорошо, вот проблема, с которой я столкнулся.

У меня есть привязки Lua к движку рендеринга, у которого есть внутренний менеджер рендеринга, который ведет свой собственный учет указателей для сцены рендеринга и управляет ими.Проблема в том, что когда я использую его из Lua, если я не сохраняю ссылку Lua на каждый отдельный объект, который я добавляю в диспетчер рендеринга C ++, он начинает собирать мусор указателей и, конечно, приводит к сбою.Я не особенно хочу сохранять каждую ссылку на каждую вещь, которую я создаю.Есть ли способ заставить Lua не собирать мусор определенными вещами?Есть ли какие-либо другие способы, которыми я могу обойти эту проблему?

Я генерирую привязки Lua с помощью SWIG.

Это было полезно?

Решение

Простой способ предотвратить сбор мусора Lua для объекта - поместить этот объект в таблицу (вызвать его uncollectable) а затем поместить эту таблицу в реестр Lua.

Другой ваш вариант - использовать дополнительный уровень косвенности с каждым объектом Lua, т. Е. использовать "легкие пользовательские данные".Пользовательские данные light указывают на указатель на объект C ++, и даже если пользовательские данные light собраны, базовый объект остается невредимым.

Эти объяснения довольно лаконичны, но я надеюсь, что с помощью Программирование на Lua, вы можете превратить один из них в рабочий код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top