c++ - 如果 RAII 构造函数抛出怎么办?

标签 c++

假设我有一个名为 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/

相关文章:

c++ - C++ 中的指针和指针集合。如何正确删除

C++ 双数组初始化错误

C++ 奇怪的错误, "no conversion from ' int' 到 'int (__cdecl *)(float,float)' "

c++ - 实现二进制搜索猜谜游戏

c++ - 不同容器的返回范围

c++ - ERROR LNK1104 - .`obj` 文件没有任何文件名

c++ - 是否有任何用于 Bloomier 过滤器的标准库在运行?

c++ - 可扩展的解析器设计

c++ - 何时在 C++ 对中使用点和箭头运算符?

c++ - 用C++获取VSXu艺人的VU