c++ - Qt 中的异常安全

标签 c++ qt exception exception-handling

Wikipedia说“一段代码是异常安全的,如果代码中的运行时故障不会产生不良影响,例如内存泄漏,乱码存储数据或无效输出。异常安全代码必须满足放置的不变量即使发生异常,也可以在代码上。”

看来我们需要异常处理来保证异常安全。另一方面,在我看来,异常处理在 Qt 应用程序中并不是很流行。

您在 Qt 中满足异常安全的最佳实践是什么?你用什么来代替异常处理?

最佳答案

C++ 有一个非常强大的异常安全机制。为所有因异常而超出范围的变量运行析构函数。这与 Java 等语言不同,后者的异常安全要求程序员获取 catchfinally从句对。

调用析构函数的 C++ 行为与堆栈上的 Qt 对象无缝协作。 Qt 类都有析构函数,没有一个需要手动清理。此外,QSharedPointer<T>可用于管理堆分配的 Qt 对象;当最后一个指针超出范围时,对象被销毁。这包括指针由于异常而超出范围的情况。

因此,异常安全当然存在于 Qt 中。它只是透明的。

关于c++ - Qt 中的异常安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3130734/

相关文章:

c++ - 使用 std::swap 而不是使用 '=' 运算符进行赋值

c++ - QPainterPath 形状 union (单笔划)

windows - 配置 Qt Creator 以使用 Git 的正确方法是什么?

javascript - 抛出 JavaScript 异常的标准做法是什么?

.net - 尝试使用 TdDataAdapter.Fill() (Teradata DataAdapter) 填充 DataTable 时出现 System.Net.Sockets.SocketException

c++ - 转换一个没有。从字符串到整数

c++ - 设置来自系统 ("command"的变量) (C++)

c++ - 我如何使用 CryptoAPI 在 Windows7 上获取证书信任列表

C++ 是否可以延迟常量静态成员的初始化?

java.util.Properties 多个值 ArrayIndexOutOfBoundsException