当我的lua代码抛出错误时,为什么我不能捕获luabind :: error异常?

Sea*_*son 5 c++ lua exception-handling luabind c++11

当您从c ++调用LUA函数并且存在运行时错误时,LuaBind会抛出一个luabind :: error异常,您可以捕获该异常,然后读取堆栈以查看错误是什么.我的调试器肯定会捕获此异常,但是当我让调试器继续运行时,程序会立即终止,而不是在我的代码中捕获异常.

在析构函数~sexy_member_void_caller()的LuaBind包含文件的"call_member.hpp"中抛出异常.

简单的测试代码会出现问题.我正在使用Xcode 5和LuaBind 0.9.1.

Sea*_*son 8

事实证明,在析构函数中抛出异常不好的做法.使用C++ 11析构函数是隐式的noexcept(true),因此如果发生异常,程序将终止.LuaBind在析构函数中使用异常,因此在我的现代编译器中程序终止.将方法签名编辑为:

~proxy_member_void_caller() noexcept(false) {}
Run Code Online (Sandbox Code Playgroud)

允许您在c ++ 11中捕获LuaBind中的异常.

  • 这不仅仅是糟糕的做法! (2认同)