如何在C++中清空lua栈中的所有内容?

虽然我在尽可能减少调用 lua_getglobal 的次数来修复 bug,但这还不足以满足长期需求。有没有人知道如何清除 Lua 栈中的所有内容以避免内存管理问题?

---编辑---

根据我刚刚进行的实验,lua_settop 将清除表格到给定值。但是,在我知道要移除多少项时,lua_pop 更有效吗?

点赞
用户234175
用户234175

一个简单的lua_settop(L, 0);就可以完成任务。

一个简单但有点牵强的例子是你有一个lua_CFunction

int foo(lua_State *L)
{
  // 拉取一些随机数据
  int bar = luaL_checknumber(L, 1);
  const char *baz = luaL_checkstring(L, 2);
  // 完成foo的任务

  // 在返回前完全清除栈
  lua_settop(L, 0);
  return 0;
}

这里的例子有点牵强,因为如果VM调用foo,那么清理是不必要的。但如果你的C++代码直接调用foo,那么清理就是必要的。无论如何,希望这能说明它的调用上下文。

2013-11-11 01:35:28