c++ - 尝试/捕获 C++ 类构造函数的 "in the middle"

标签 c++

<分区>

Possible Duplicate:
Difference between try-catch syntax for function

几天前我在读一本关于 C++ 的书(它甚至是 Bjarne Stroustrup 的书),我在关于异常的章节中找到了这样的方法:

class Foo :
    public Bar
{
   // ...
};

// ...

Foo::Foo
try :
    Bar ()
{
   // ...
}
catch (const std::exception& error)
{
   // ...
}

我不知道为什么,但我觉得这个结构很奇怪。但是它非常强大,因为它使我能够处理基类“内部”顶层构造函数抛出的异常。

我使用 C++ 几年了,我想,我对这门语言非常了解……这种方法有什么问题?为什么在 C++ 书籍中不经常提到它?

最佳答案

真正的原因是您在该 catch block 中几乎无能为力。您可以做一些类似日志记录的事情,或者改为抛出不同的异常,但如果您到达 catch block 的末尾而没有抛出,则原始异常将被自动重新抛出。

Herb Sutter 在 this article 中很好地解释了这一切.

关于c++ - 尝试/捕获 C++ 类构造函数的 "in the middle",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9488020/

相关文章:

c++ - 如何在 C++ 中使用数组?

c++ - 如何将 std::mutex 与其他一些类放在 std::tuple 中?

c++ - 守护进程不与通知发送交互

c++ - 访问派生类成员的基类函数

c++ - cpp中的模板

c++ - 给定日期范围生成工作日日期的算法

c++ - 条件运算符的局限性? :

c++ - 从C++/CX迁移到C++/WinRT时与 header 和 namespace 有关的错误

c++ - 为什么 std::bitset<5>{}[0] 不是 constexpr?

c++ - 最佳 PCL 模板对齐设置