在使用tolua ++时,我怎么能让lua获得返回值的所有权?

时间:2016-03-23 15:29:12

标签: c++ lua tolua++

这是我的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,所以我想知道是否有类似的方法来实现它?

1 个答案:

答案 0 :(得分:3)

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

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

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