나는 루아가이 오류가 발생하는 longjmp를 사용하는 C의 컴파일러에 의해 준수 할 때 내가 아는이luaL_error가 호출 될 때 왜 C++ 객체 소멸자가 호출되지 않습니까?
class Test
{
public:
Test() {printf(">>> Test()\n");}
~Test() {printf(">>> ~Test()\n");}
}
int myFunc(lua_State *L)
{
Test t;
luaL_error(L, "error");
return 0;
}
과 같은 코드의 조각이있다. 그래서, 나는 C++ 컴파일러를 사용하여 오류를 건네기 위해 C++ 예외를 사용하고 오류가 발생하더라도 소멸자가 호출되도록 컴파일했습니다. 하지만 내 문제는 객체의 소멸자가 호출되지 않는다는 것입니다. 그러나
, 다음과 같은 코드가 작동 (소멸자가 호출된다)
int myFunc(lua_State *L)
{
Test t;
throw(1) // just for testing
return 0;
}
왜이 앞으로 일어날? LUAI_THROW 매크로는 throw 키워드로 해석됩니다.
이 게시물의 중요 정보가 누락되었습니다. – Schollii