Есть ли способ вернуть объекты, расположенные в куче, в lua без «кеширования» ссылок на них?
Учтите следующее:
class foo
{
char const* bar() const
{
char* s = malloc(...);
...
return s; // << Leak. How to transfer the ownership of 's' to lua?
}
};
Если я возвращаю строку в выделенную память, я должен удалить ее.
Есть ли способ передать право собственности на Луа?
Или даже возможно получить lua_state*
реализовать возврат строки самостоятельно lua_pushstring(...)
?
Вы можете передать свою строку в Lua с помощью lua_pushstring функционировать и освободить его потом:
Вставляет строку с нулем в конце, на которую указывает s, в стек. Lua делает (или повторно использует) внутреннюю копию данной строки, поэтому память в s может быть освобождена или повторно использована сразу после возврата функции. Строка не может содержать встроенные нули; предполагается, что он заканчивается на первом нуле.
Если вы действительно хотите, чтобы право собственности было передано, рассмотрите возможность обернуть вашу строку в соответствующую объект с его собственной метатаблицы и реализации __gc
функция.
Объявляя параметр ‘lua_Sate * state’, tolua ++ передаст Lua-State функции.
С типом возврата типа ‘lua_Object’ вы можете вернуть индекс стека объекту lua.
PKG
lua_Object MyFunctionReturningATable(lua_State* s);
CPP
lua_Object MyFunctionReturningATable(lua_State* s)
{
lua_newtable(s);
...
return lua_gettop();
}