Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用C++;析构函数失效_C++_Odbc_Destructor - Fatal编程技术网

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,将调试器设置为在访问冲突和堆栈溢出时中断,然后单步执行。这很可能是问题的原因