деструкторы на объектах gc-ed lua - PullRequest
3 голосов
/ 30 апреля 2010

Я знаю, что Луа - выпускник. Я знаю, что Lua может иметь дело с объектами c через userdata.

Вот мой вопрос: есть ли в любом случае зарегистрировать функцию, чтобы она вызывалась, когда объект пользовательских данных C gc-ed lua? [В основном деструктор].

Спасибо!

1 Ответ

7 голосов
/ 30 апреля 2010

Да, есть метаметод , называемый __gc специально для этой цели. См. Глава 29 - Управление ресурсами из Программирование на Lua (PIL) для получения более подробной информации.

Следующий фрагмент создает метатабельный и регистрирует обратный вызов метаметода __gc:

  luaL_newmetatable(L, "SomeClass");

  lua_pushcfunction(L, some_class_gc_callback);
  lua_setfield(L, -2, "__gc");
...