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

时间:2014-05-09 21:33:25

标签: c++ c++11 exception-handling lua luabind

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

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

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

1 个答案:

答案 0 :(得分:8)

事实证明它是bad practice to throw exceptions in destructors。使用C ++ 11析构函数是隐式noexcept(true),因此如果发生异常,程序将终止。 LuaBind在析构函数中使用异常,因此在我的现代编译器中程序终止。将方法签名编辑为:

~proxy_member_void_caller() noexcept(false) {}

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