Qt也不例外.这对C++代码有何影响
Qt is not exception safe. How does this impact C++ code?
Qt目前不是异常安全的,似乎也不可能是异常安全的。这对与Qt交互的C++代码有什么限制?
如果我想使用Qt,我需要避免代码中的所有C++异常吗?
您可以对要在应用程序中使用的任何其他非异常安全库执行相同的两件事:在异常安全包装器中隔离它,或者放弃异常并适应它的样式。你真正要问的是第一个是否可行。
对于你的字面问题,你绝对不需要回避所有的例外。所有返回错误代码的Qt函数、不能正确清理自身的类等等都可以很容易地打包。你没有充分的理由向Qt抛出异常,所以你不能抛出也没关系。而且您并不经常将Qt对象传递给依赖于异常的非Qt库。等等。最棘手的是,它要考虑如何编写,例如,如果真正的构造函数使用无效值成功,QImage
包装器将销毁并抛出,这并不难。
但最大的问题是,不能通过信号槽连接抛出异常。如果你想以一种典型的方式来组织你的代码,低级函数抛出大部分异常,顶级函数处理大部分异常,但你想把Qt作为你的大部分中间层,这可能不会令人愉快。*例如,传统的重型控制器MVC设计,其中大多数控制器都建立在Qt上,您对异常的使用最终会非常本地化,并没有那么大的帮助。另一方面,对于MVA设计或智能模型设计,您的大多数逻辑可能根本不直接处理Qt,因此您仍然可以在相当大的范围内疯狂处理例外情况。(当然,这是假设你不必在不需要的地方使用Qt。)
*即使在这里,也有可能结束一切。例如,您不能抛出线程联接、条件等待等,但您可以构建未来和执行器,以干净的方式在线程之间传递异常。使用相同类型的脚手架,可以通过槽传递异常。但这是相当重的脚手架,你最终会得到一个与典型的Qt程序非常不同的API,所以这似乎不值得。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么擦除方法会影响结束方法
- 内联如何影响模块接口中的成员函数
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 在容量内调整矢量大小时的性能影响
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- 未达到的情况会影响开关外壳性能
- 循环仅对第一行正常工作.其他行不受 for 的影响
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 模板如何影响C++中隐式声明的规则?
- 命名空间信息会影响C++的可读性
- [[可能]]和[[不太可能]]影响程序汇编的简单示例?
- 如何保护非托管应用程序中的字符串不受进程转储的影响
- 检查nullptr是否100%保护内存布局不受segfault影响
- 为什么 std::set.erase(first, last) 会影响从中获取 (first, last) 的容器?
- 发布代码的 gdb 堆栈跟踪可读性如何影响 x64?
- "virtual"对C++析构函数有何影响?
- 如果我对"while"块发表评论,为什么程序会死机?其中的"yield"线有何影响?
- Qt也不例外.这对C++代码有何影响
- 基例如何影响使用递归函数的哪些行