如何让 tolua++ 在使用时将返回值的所有权交给 lua?

以下是我的 C++ 代码:

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

我知道当函数返回时,result 将被释放,如果我在 lua 中调用它,lua 将得不到任何东西。我需要使用 new 来禁止它被释放。但这会导致内存泄漏。因此,我应该让 lua 接管返回值的所有权。

我知道如何使用 lua_State 来实现这一点。但我正在使用 评论 来将我的 c++ 函数暴露给 lua,所以我想知道是否有一种类似的方法可以实现它?

点赞
用户140367
用户140367

这与你的 Lua 绑定无关。当你从函数中返回时,结果字符串将被破坏,指向其内部缓冲区的指针将指向已释放的内存。在任何时候库都没有机会拥有该字符串,因为最终它只执行函数调用,而结果仅在函数返回后才可用(此时它已无法使用)。经过初步的谷歌搜索,我认为 tolua++ 支持 std::string 返回值,因此您可以这样做:

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

这将起作用,因为该字符串会被拷贝。

2016-03-23 15:35:50