c++ - 如何正确处理构造函数中的异常?

标签 c++ exception-handling constructor

<分区>

Possible Duplicate:
How to clean initialized resources if exception thrown from constructor in c++

如果我正在创建 6 个对象,而这些对象创建了 5 个对象,但在创建第 6 个对象时失败了,我该如何处理构造函数中的异常?

谢谢。

最佳答案

通常的行为只是让异常传播。析构函数 对于任何完全构造的基类和成员将被调用; 如果前五个对象是成员,它们将是正确的 被破坏。

唯一可能出现问题的情况是,如果你的对象是 谈论已经动态分配(使用new)。如果那是 案例:首先要问自己的是为什么?你为什么 动态分配,而不是使对象成为具体成员?在 根据我的经验,这种需求非常非常少见,除了少数特殊情况 情况下(例如编译防火墙成语),在这种情况下,会有 通常恰好是类中的一个对象(例如,指向 实现对象)。在这种情况下,没有问题,因为如果 该对象的 new 失败,没有其他需要做的事情 撤销。

如果您发现自己处于非常罕见的情况下,您真的 必须使用动态分配并且有多个这样的对象 (例如,因为你有两个多态的子对象),然后 你必须确保每个分配都包含在一些 某种子对象(智能指针可以解决问题);曾经是第一个 子对象已成功构造,其析构函数将是 如果构造函数在稍后某个时间点失败,则调用。

关于c++ - 如何正确处理构造函数中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723970/

相关文章:

c++ - 如何更改 VS2008 中的构建语言?

c++ - 使用 wmemset 初始化导致 coredump

php - 在 ZF2 模块中定义自定义 ExceptionStrategy

java - spring 使用哪个模型类来响应请求映射方法的错误?

c++ - 构造函数的优先级c++

c++ - 指针初始化覆盖值

c++ - 从函数返回类对象的不同行为

c++ - 迭代 C++ 容器时是否可以定义 'step' 大小?

c++ - decltype(auto) 应该为自动类型推导的参数推导什么?

java - 不抛出测试异常