gpt4 book ai didi

c++ - 如果我知道我的函数不会抛出异常,我应该在析构函数中放置 try...catch block 吗

转载 作者:太空狗 更新时间:2023-10-29 20:07:40 26 4
gpt4 key购买 nike

我知道析构函数不应该抛出异常。

http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.13

我有以下代码:

~a()
{
cleanup();
}

// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}

在我的静态源代码分析中,它提示说我应该以这种方式调用清理函数:

~a()
{
try {
cleanup();
}
catch(...) {
// What to do? Print out some logging message?
}
}

// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}

我不确定在析构函数调用函数时将 try...catch block 放在析构函数中是否是一个好习惯。作为:

(1) 如果清除函数能够抛出异常,我就知道发生了不好的事情。我更喜欢它是 fail-fast .也就是让整个系统崩溃,让程序员去调试。

(2) 进入和退出 try...catch block 时发生开销。

(3) 代码看起来很繁琐,在类的析构函数周围有很多 try...catch block 。

我可能会遗漏一些其他要点,为什么 try...catch block 应该就位。

谢谢。

最佳答案

因为 delete 不会抛出,cleanup 也不会抛出,因此没有必要将调用放在 try-catch 中。

由于您的静态分析工具可能很难弄清楚这一点,也许您可​​以通过将 cleanup 声明为 no-throw 来帮助解决这个问题(尽管这只是一个猜测)。

void cleanup() throw();

关于c++ - 如果我知道我的函数不会抛出异常,我应该在析构函数中放置 try...catch block 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1858639/

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