c++ - 使用tolua++时如何让lua获得返回值的所有权?

标签 c++ lua tolua++

这是我的 C++ 代码:

// tolua_begin
const char* GetSomeString() {
    std::string result;
    // do something
    return result.c_str();
}
// tolua_end

我知道当函数返回时,result将被释放,如果我在lua中调用它,lua将什么也得不到。我需要一个新的来禁止它被释放。但会造成内存泄漏。所以我应该让lua拥有返回值的所有权。

我知道如何使用lua_State来做到这一点。但我使用 comment 将我的 C++ 函数公开给 lua,所以我想知道是否有类似的方法来实现它?

最佳答案

这与你的 lua 绑定(bind)无关。当您从函数返回时,结果字符串将被破坏,指向其内部缓冲区的指针将指向已释放的内存。库没有机会获得该字符串的所有权,因为最终它只是执行函数调用,并且结果仅在函数返回后才可用(此时它已不可用)。 After a cursory google search ,我认为 tolua++ 支持 std::string 返回值,所以你可以这样做:

// tolua_begin
std::string GetSomeString() {
    std::string result;
    // do something
    return result;
}
// tolua_end

这将起作用,因为字符串已被复制。

关于c++ - 使用tolua++时如何让lua获得返回值的所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36182311/

相关文章:

c++ - tolua++ 从 C++ 代码调用 Lua 函数

c++ - 在 MSMQ 消息中发送具有 BSTR 值类型的 COM 对象

c++ - 继承和 Qt 信号

mysql - 使用 Luasql 和 sqlite3 与 DB 文件的通信无法正常工作

将代码从 'hard-coding' 转换为 'soft-coding'

c++ - GLSL 和 FBOs - glActiveTexture 不起作用?

c++ - 带结构的模板

lua - 在终止/退出 lua 脚本时调用函数(atexit()/清理函数)

c++ - tolua++:将指针所有权转移到 lua gc