0

在一个独立的应用程序(而不是库)中,我被引导相信,就异常安全而言,目标应该是“始终提供基本保证”。

这听起来合理吗?我们是否应该只担心在它们有助于实现该目标的情况下提供强大的和无保障的保证?

4

2 回答 2

1

您的目标是尽可能提供最强大的异常安全性,并且只有在必须时才降低它,或者如果不降低它会很昂贵。

您可以提供的最佳异常安全性是 nothrow,但这显然在任何时候都难以避免。有些地方你的代码应该抛出,否则你只是在避免一般的异常。

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

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

也许目标最好写成“至少提供基本保证,但争取获得最好的保证”。

于 2013-01-27T14:04:53.737 回答
0

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

总而言之,我想说您应该尝试提供强/无保证作为指导方针,但您可以做出(希望消息灵通的)决定以在特定情况下降低这些要求。

于 2013-01-27T16:26:31.990 回答