如何从C++中清除lua堆栈中的所有内容?

Mad*_*ica 2 c++ lua

虽然我尽可能少地通过电话来修复错误lua_getglobal,但这对于长期来说还不够好.那么有谁知道如何清理lua堆栈中的所有内容以防止内存管理问题?

---编辑---
从我刚刚做过的实验中,lua_settop将表格清理到给定值.但是,在我知道有多少项目我想删除的时候,lua_pop效率更高?

gre*_*olf 5

一个简单的lua_settop(L, 0);应该做的伎俩.

一个简单但有说服力的例子说你有一个lua_CFunction:

int foo(lua_State *L)
{
  // marshal some random data
  int bar = luaL_checknumber(L, 1);
  const char *baz = luaL_checkstring(L, 2);
  // do foo's task

  // completely clear the stack before return
  lua_settop(L, 0);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是设计的,因为如果foo由VM调用,则不需要清理.但是如果你foo直接调用C++代码,这可能是必要的.无论如何,希望这说明了它的呼唤背景.