<分区>
Possible Duplicate:
How to clean initialized resources if exception thrown from constructor in c++
如果我正在创建 6 个对象,而这些对象创建了 5 个对象,但在创建第 6 个对象时失败了,我该如何处理构造函数中的异常?
谢谢。
<分区>
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/