独立应用程序中的异常安全性

时间:2013-01-27 13:49:19

标签: c++ exception

在一个独立的应用程序(而不是库)中,我被认为在异常安全方面,目标应该是“提供basic guarantee”。

听起来合理吗?我们是否应该只担心在他们为实现这一目标做出贡献时提供强有力的保证?

2 个答案:

答案 0 :(得分:1)

您的目标是尽可能提供最强的异常安全性,只有在必须降低它的情况下才能降低它的安全性。

您可以提供的最佳异常安全性并非如此,但这显然很难避免。有些地方你的代码应该抛出,否则你只是避免了一般的异常。

接下来,您应该努力获得强有力的保证,但实施起来可能会很昂贵。它通常需要制作过多的临时副本,以确保在您的功能运行期间不会影响可观察状态。

至少应该提供基本保证。这通常并不昂贵,因为您只是确保没有泄漏。智能指针类型可以帮助您。这并不意味着基本的保证是坏的,但如果你能做得更好,你应该。

也许这个目标可以更好地写成“至少提供 基本保证,但努力争取最好的保证”。

答案 1 :(得分:0)

我认为编写应用程序的人最能回答这个问题。我有调用exit()来代表失败的代码,这违反了很多指导原则,但我认为我可以证明在那个特定情况下的决定(一次性应用程序,如编译器)。实际上,它甚至不会清理资源,而是将其留给操作系统。另一方面,如果独立应用程序是一个长寿命的服务器应用程序,基本保证是不够的。此外,对于图书馆代码,您通常没有必要的知识来确定它的使用位置,因此您必须小心。

总而言之,我说你应该尝试提供强/非保证作为指导,但你可以做出(希望是明智的)决定,在特定情况下降低这些要求。