@ZSashka

Можно ли использовать shared_ptr в играх?

Добрый день. Пишу игру на c++ и lua. Появилась необходимость создавать объект в lua и передавать его в плюсы. Проблема в том что сборщик мусора в lua уничтожает мой объект и использовать его в плюсовом коде уже невозможно. Проблема решается через shared_ptr, но я не знаю на сколько это правильное решение, ведь тогда мне придется в плюсах переписать все на использование этого умного указателя. Отсюда вопросы, можно ли использовать shared_ptr в играх, ведь производительность упадет, по сравнению с обычными указателями, и есть ли какие то другие решения передачи объектов между lua и c++?
  • Вопрос задан
  • 174 просмотра
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C++
Ваш вопрос настолько топорно составлен, что даже непонятно как вообще отвечать.

1. Передачу объекта из одной среды в другую не обязательно решать блокировкой (lock) именно того объекта, что существует в "мире" lua.
2. Даже если блокировать lua-объект, почему вы собрались это делать shared_ptr-ом?? Он как-то шарит владение с менеджером памяти lua? Не слышал о такой возможности. Т.е. я не думаю что
Проблема решается через shared_ptr

3. Зачем всё переписывать на использование shared_ptr?? вы хотите начать писать на плюсах как на lua? даже если бы ваши предположения в п.1 и п.2 магическим образом оказались верны, shared_ptr и сборка мусора - сильно разные вещи, не разобравшись ни в одной из них до конца, вы посчитали что это одно и то же потому что оно "похоже".
4.
ведь производительность упадет

не упадёт, точнее вы этого не узнаете т.к. ничего нормального по такой стратегии не напишете.

Пишу игру на c++ и lua.

Вы вообще писали на C++ или сразу пишете на "C++ и Lua"?

можно ли использовать shared_ptr в играх

Можно, в тех местах где это целесообразно. Не думаю что игры сильно отличаются в этом вопросе от других C++ проектов.

и есть ли какие то другие решения передачи объектов между lua и c++?

А что говорить документация используемого вами интерпретатора lua?
Ответ написан
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Просто держите Lua переменную со значением таблицы (объекта) в каком-то пространстве, чтобы сборщик мусора её не удалял. Ещё есть функция lua_ref(), которая может добавить любое Lua значение во внутренний реестр.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы