【问题标题】:How could I let lua take ownership of return value when using tolua++?使用 tolua++ 时如何让 lua 拥有返回值的所有权?
【发布时间】:2016-03-23 15:29:12
【问题描述】:

这是我的 C++ 代码:

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

我知道函数何时返回,result 将被释放,如果我在 lua 中调用它,lua 将一无所获。我需要new 一个来禁止它被释放。但这会导致内存泄漏。所以我应该让 lua 拥有返回值的所有权。

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

【问题讨论】:

    标签: c++ lua tolua++


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-15
      • 2016-07-17
      • 2020-05-24
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多