gpt4 book ai didi

c++ - 调用 C++ 析构函数失败

转载 作者:行者123 更新时间:2023-11-30 03:04:10 25 4
gpt4 key购买 nike

我有这个代码:

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 中。

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

最佳答案

问题似乎是 CDatabase::Close 抛出异常并导致析构函数的其余部分被绕过。该文档没有提到此方法可以抛出,但 Internet 上的其他使用示例表明它可以。

尝试如下修改析构函数

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

关于c++ - 调用 C++ 析构函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com