调用C ++析构函数失败

时间:2012-01-17 17:21:25

标签: 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");

}

输出为:in dest \n about to close \n,就是这样。

它(mainConn - > CDatabase类)似乎在调用close()时无声地失败。我知道你应该在完成它们后立即关闭连接。但是我从其他人那里继承了这段代码,但该程序并没有提供一种在合适的时间关闭连接的简单方法。 Close()和open()调用位于afxdb.h

知道为什么它会像这样失败吗?谢谢!

1 个答案:

答案 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");
}