tolua++:将指针所有权转移到lua gc
tolua++: Transfer pointer ownership to lua gc
有没有办法将堆上分配的 return 个对象分配到 lua 而无需 'caching' 对它们的引用?
考虑以下几点:
class foo
{
char const* bar() const
{
char* s = malloc(...);
...
return s; // << Leak. How to transfer the ownership of 's' to lua?
}
};
如果我 return 分配内存的字符串我必须删除它。
有没有办法将所有权转让给 lua?
或者是否有可能让 lua_state*
自己使用 lua_pushstring(...)
实现字符串 returning?
您可以使用 lua_pushstring 函数将您的字符串传递到 Lua,然后释放它:
Pushes the zero-terminated string pointed to by s onto the stack. Lua makes (or reuses) an internal copy of the given string, so the memory at s can be freed or reused immediately after the function returns. The string cannot contain embedded zeros; it is assumed to end at the first zero.
如果您确实希望转让所有权,请考虑将您的字符串包装到适当的 object 中,并使用其自己的元表并实现 __gc
函数。
通过声明参数 'lua_Sate* state' 到 lua++ 会将 Lua-State 传递给函数。
使用 return 类型的 'lua_Object' 类型,您可以 return 堆栈索引到 lua 对象。
打包
lua_Object MyFunctionReturningATable(lua_State* s);
CPP
lua_Object MyFunctionReturningATable(lua_State* s)
{
lua_newtable(s);
...
return lua_gettop();
}
有没有办法将堆上分配的 return 个对象分配到 lua 而无需 'caching' 对它们的引用?
考虑以下几点:
class foo
{
char const* bar() const
{
char* s = malloc(...);
...
return s; // << Leak. How to transfer the ownership of 's' to lua?
}
};
如果我 return 分配内存的字符串我必须删除它。 有没有办法将所有权转让给 lua?
或者是否有可能让 lua_state*
自己使用 lua_pushstring(...)
实现字符串 returning?
您可以使用 lua_pushstring 函数将您的字符串传递到 Lua,然后释放它:
Pushes the zero-terminated string pointed to by s onto the stack. Lua makes (or reuses) an internal copy of the given string, so the memory at s can be freed or reused immediately after the function returns. The string cannot contain embedded zeros; it is assumed to end at the first zero.
如果您确实希望转让所有权,请考虑将您的字符串包装到适当的 object 中,并使用其自己的元表并实现 __gc
函数。
通过声明参数 'lua_Sate* state' 到 lua++ 会将 Lua-State 传递给函数。
使用 return 类型的 'lua_Object' 类型,您可以 return 堆栈索引到 lua 对象。
打包
lua_Object MyFunctionReturningATable(lua_State* s);
CPP
lua_Object MyFunctionReturningATable(lua_State* s)
{
lua_newtable(s);
...
return lua_gettop();
}