繁体   English   中英

什么时候适合使用 C++ 异常?

[英]When is it appropriate to use C++ exceptions?

我正在尝试设计一个需要动态分配一些 memory 的 class ..

我曾计划在施工期间分配它需要的 memory,但是如何处理失败的 memory 分配? 我应该抛出异常吗? 我在某处读到异常应该只用于“例外”情况,并且用完 memory 对我来说似乎不是一个例外情况。

我是否应该在单独的初始化例程中分配 memory 并检查故障,然后优雅地销毁 class 实例?

或者我应该改用异常? 如果这些 memory 分配失败,class 将没有任何用处。


编辑:共识似乎是 memory 用完是一个例外情况。

将看到如何 go 关于这个.. 谢谢.. :)

假设您使用 new 分配 memory,并且没有覆盖new运算符,如果无法正确分配 memory,它将自动抛出std::bad_alloc异常。

我在某处读到异常应该只用于“例外”情况,并且用完 memory 对我来说似乎不是一个例外情况。

用完 memory 对我来说似乎是一个非常特殊的情况:)

处理这种情况非常困难。 您可能希望向应用程序的用户返回一个有意义的错误,但如果这是由于缺少 memory 导致的问题,您甚至可能无法负担 memory 来分配错误消息。 这确实有点像第 22 条规定的情况。

有一种防御性编程技术(有时称为 memory 降落伞或雨天基金),您可以在应用程序启动时分配一大块 memory。 然后当您处理bad_alloc异常时,您释放此 memory 并使用可用的 memory 优雅地关闭应用程序,包括向用户显示有意义的错误。 这比崩溃要好得多:)

我认为用完 memory (特别是堆内存)是一个例外情况,如果您的 class - 以及您的应用程序 - 无法继续,我认为异常抛出/处理是一种非常合适和优雅的方法。

当您超出 memory 时,C++ 中的通常行为是抛出异常。 默认情况下,内置的new运算符会执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM