繁体   English   中英

使用tolua ++时,如何让lua拥有返回值的所有权?

[英]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

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

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

这与您的lua绑定无关。 从函数返回时,结果字符串将被破坏,指向其内部缓冲区的指针将指向已释放的内存。 库没有机会获得此字符串的所有权,因为最终它只执行一个函数调用,并且结果仅在函数返回后才可用(到那时该函数不可用)。 在经过粗略的Google搜索之后 ,我认为tolua ++支持std::string返回值,因此您可以执行以下操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM