tolua ++: передача владения указателем в lua gc

Есть ли способ вернуть объекты, расположенные в куче, в 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(...)?

3

Решение

Вы можете передать свою строку в Lua с помощью lua_pushstring функционировать и освободить его потом:

Вставляет строку с нулем в конце, на которую указывает s, в стек. Lua делает (или повторно использует) внутреннюю копию данной строки, поэтому память в s может быть освобождена или повторно использована сразу после возврата функции. Строка не может содержать встроенные нули; предполагается, что он заканчивается на первом нуле.

Если вы действительно хотите, чтобы право собственности было передано, рассмотрите возможность обернуть вашу строку в соответствующую объект с его собственной метатаблицы и реализации __gc функция.

2

Другие решения

Объявляя параметр ‘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();
}
0

По вопросам рекламы [email protected]