Использование lua_error с LuaJIT пропускает деструкторы стека объектов? - PullRequest
0 голосов
/ 28 августа 2018

Я скомпилировал 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, я не уверен, не вызовет ли это у меня никаких проблем?

...