我有这段代码:
DManag::~DManag() {
printf("in dest\n");
if(mainConn.IsOpen()) {
printf("about to close\n");
mainConn.Close();
printf("closed!\n");
}
printf("end dest\n");
}
输出为:in dest \n about to close \n
,就是这样。
它(mainConn - > CDatabase类)似乎在调用close()时无声地失败。我知道你应该在完成它们后立即关闭连接。但是我从其他人那里继承了这段代码,但该程序并没有提供一种在合适的时间关闭连接的简单方法。 Close()和open()调用位于afxdb.h
。
知道为什么它会像这样失败吗?谢谢!
答案 0 :(得分:3)
问题似乎是CDatabase::Close
抛出异常并导致绕过剩余的析构函数。文档没有提到这种方法可以抛出,但互联网上的其他使用示例表明它可以。
尝试按如下方式修改析构函数
DManag::~DManag() {
printf("in dest\n");
if(mainConn.IsOpen()) {
printf("about to close\n");
try {
mainConn.Close();
} catch (CDBException&) {
print("exception occurred\n");
}
printf("closed!\n");
}
printf("end dest\n");
}