C++ 调用C++;析构函数失效
我有以下代码:C++ 调用C++;析构函数失效,c++,odbc,destructor,C++,Odbc,Destructor,我有以下代码: DManag::~DManag() { printf("in dest\n"); if(mainConn.IsOpen()) { printf("about to close\n"); mainConn.Close(); printf("closed!\n"); } printf("end dest\n"); } 输出为:在dest中\n即将关闭\n,就是这样 调用close()时,它(main
DManag::~DManag() {
printf("in dest\n");
if(mainConn.IsOpen()) {
printf("about to close\n");
mainConn.Close();
printf("closed!\n");
}
printf("end dest\n");
}
输出为:在dest中\n即将关闭\n
,就是这样
调用close()时,它(mainConn->CDATA基类)似乎会自动失败。我知道你应该在处理完关系后立即关闭它们。但是我从其他人那里继承了这段代码,但是程序没有提供一种在正确的时间关闭连接的简单方法。Close()和open()调用位于afxdb.h
中
你知道为什么会这样失败吗?谢谢 问题似乎是
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");
}
能否
mainConn.Close()
抛出任何异常?@hmjd是Windows API的一部分,它是一个稍旧的包(ODBC)。文档中没有提到任何异常,这有点欠缺。我再看看。。。没有任何关于异常的内容。如果你在代码中设置一个断点并逐步执行它,会发生什么?打印语句正在执行吗?在程序退出之前,输出没有被刷新可能是一个问题吗?在这种情况下,出于调查目的,建议:尝试{mainConn.Close();}catch(…){printf(“exception\n”);}
检查异常。@lefticus我也尝试打印到文件,但我想可能会遇到同样的问题(不是刷新)。我将尝试断点。谢谢。不幸的是,它不会引发任何异常。我甚至尝试了catch(…).@skynorth是否已连接调试器并查看它是否在Av上崩溃?@skynorth Av=访问冲突。我会将调试器连接到DTOR,将调试器设置为在访问冲突和堆栈溢出时中断,然后单步执行。这很可能是问题的原因