使用 tolua++ 时,如何让 lua 获得 return 值的所有权?

How could I let lua take ownership of return value when using tolua++?

这是我的 C++ 代码:

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

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

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

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

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

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