Я скомпилировал LuaJIT с MSVC x64, что означает, что должна быть полная совместимость исключений C ++, согласно официальному сайту LuaJIT .
Один из пунктов гласит, что " Бросать ошибки Lua по фреймам C ++ безопасно. Будут вызваны деструкторы C ++. "
Я предполагал, что это означает, что я могу использовать lua_error в функции C ++ и не беспокоиться об объектах в стеке:
struct Test
{
Test() {std::cout<<"Constructor"<<std::endl;}
~Test() {std::cout<<"Destructor"<<std::endl;}
};
int some_function(lua_State *l)
{
Test t {};
lua_pushstring(l,"error message");
lua_error(l);
return 0;
}
(функция вызывается из Lua-скрипта)
Однако деструктор никогда не вызывается. Так что же на самом деле означает этот пункт на сайте? Как я могу использовать lua_error , не беспокоясь об утечках памяти?
Согласно этому вопросу проблему можно решить, скомпилировав Lua в виде C ++ -кода, но, поскольку я использую LuaJIT, я не уверен, не вызовет ли это у меня никаких проблем?