![]() |
1
29
我的猜测是这取决于编译器。但是,在回调中抛出异常是一个非常糟糕的主意。要么它将完全失效,要么SQLite库中的C代码将无法处理它。如果这是sqlite中的一些代码,请考虑:
如果异常“有效”,C代码就无法捕获它,P将永远不会被释放。当然,图书馆可能分配的其他资源也是如此。 |
![]() |
2
14
已经有回调中止API调用的协议。从 the docs 以下内容:
我强烈建议您使用这个而不是例外。 |
![]() |
3
10
sqlite希望您返回sqlite_abort on error和0返回代码no error。所以你应该 在尝试捕获中包装所有C++回调 . 然后在catch中返回sqlite sqlite_abort错误代码,否则返回零。 如果绕过通过sqlite返回,则会出现问题,因为从回调返回后,它不会释放/完成任何代码。这将导致无法解决的问题,其中一些可能非常模糊。 |
![]() |
4
1
这是一个非常有趣的问题,我出于好奇对它进行了测试。在我的操作系统x w/gcc 4.2.1中,答案是“是”。它工作得很好。我认为一个真正的测试是使用GCC为C++和其他(MSVC)。LLVM?)对于C部分,看它是否仍然有效。 我的代码: 愈伤组织
胼胝体:
主.cpp:
|
![]() |
5
0
如果从sqlite调用的回调来自调用sqlite3_exec()的同一线程,则调用堆栈中的某个位置的throw应该由更高级别的catch捕获。 亲自测试应该很简单,不是吗? [编辑] 在深入挖掘自己之后,我发现C++标准对于抛出异常时C调用的C++函数的行为有些模糊。 您一定要使用API期望的错误处理机制。否则,您将主要是API本身处于未定义状态,任何进一步的调用都可能失败/崩溃。 |
|
lfox · 如果列中不存在某个值,则停止代码执行 2 年前 |
![]() |
zaen · 将值传递到异常字符串消息中 2 年前 |
![]() |
Zephyr · 如何在双ListView选择系统上实现过滤器? 6 年前 |
![]() |
Aave · 错误数组长度的特定异常 6 年前 |