sha*_*oth 31 c c++ exception-handling exception visual-c++
我有一个C++应用程序调用SQLite(SQLite在C中)sqlite3_exec(),它反过来可以调用我在C++中实现的回调函数.SQLite被编译成静态库.
如果异常转义我的回调,它会通过SQLite的C代码安全地传播到调用sqlite3_exec()的C++代码吗?
小智 29
我猜这是依赖于编译器的.但是,在回调中抛出异常将是一个非常糟糕的主意.它要么完全不起作用,要么SQLite库中的C代码将无法处理它.考虑这是否是SQLite中的一些代码:
{
char * p = malloc( 1000 );
...
call_the_callback(); // might throw an exception
...
free( p );
}
Run Code Online (Sandbox Code Playgroud)
如果异常"有效",则C代码无法捕获它,并且永远不会释放p.当然,库可能已分配的任何其他资源也是如此.
Ant*_*ert 10
SQLite期望您在出错时返回SQLITE_ABORT,并返回0返回代码,没有错误.所以你应该把你所有的C++回调包装在try catch中.然后在catch中返回一个SQLite SQLITE_ABORT错误代码,否则为零.
如果你绕过通过SQLite返回会出现问题,因为它不会释放/完成从你的回调返回后它执行的任何代码.这将导致无法解决的问题,其中一些问题可能非常模糊.
| 归档时间: |
|
| 查看次数: |
2985 次 |
| 最近记录: |