假设我有一个名为 ManagedFile 的用于 fopen 和 fclose 的 RAII 类,由于某种原因它失败并且构造函数抛出。
ManagedFile mf("e.txt") //fails and throws
mf.F( //What would happen here?9
永远不会创建 mf 吗?
如果它不会,如果我稍后使用 mf 会发生什么,假设访问 mf 内的文件 *F?
如果 RAII 类的构造函数失败,究竟会发生什么?
最佳答案
如果 mf
的构造失败,则 mf
的生命周期不会被认为已经开始,mf
的任何部分构造都会恢复(通过调用已完成构建的基类和成员的析构函数),并且将不会到达使用 mf
的下一行,因为控制权将转移到 catch block 中(否则程序将终止)。
关于c++ - 如果 RAII 构造函数抛出怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497883/