私はこのようなコードを持っています
class Test
{
public:
Test() {printf(">>> Test()\n");}
~Test() {printf(">>> ~Test()\n");}
}
int myFunc(lua_State *L)
{
Test t;
luaL_error(L, "error");
return 0;
}
lua が c コンパイラーによってコンパイルされたとき、longjmp を使用してエラーが発生することを私は知っています。そのため、C++ コンパイラを使用してコンパイルし、C++ 例外を使用してエラーを処理し、エラーがスローされた場合でもデストラクタを呼び出すようにしました。しかし、私の問題は、オブジェクトのデストラクタが呼び出されないことです。
ただし、次のコードは機能しています (デストラクタが呼び出されます)。
int myFunc(lua_State *L)
{
Test t;
throw(1) // just for testing
return 0;
}
なぜこれが起こったのですか?LUAI_THROW マクロはスロー キーワードとして解釈されるはずです。