我正在尝试设计一个需要动态分配一些内存的类..
我计划在构造期间分配它需要的内存,但我该如何处理失败的内存分配?我应该抛出异常吗?我在某处读到异常应该只用于“异常(exception)”情况,内存不足对我来说似乎不是异常(exception)情况..
我应该改为在单独的初始化例程中分配内存并检查失败,然后优雅地销毁类实例吗?
或者我应该改用异常?如果这些内存分配失败,该类将无事可做。
编辑:共识似乎是内存不足是一个异常(exception)情况。
将看看如何解决这个问题..谢谢.. :)
最佳答案
假设您正在使用 new 分配内存,并且没有覆盖 new
运算符,如果分配内存失败,它将自动抛出 std::bad_alloc
异常
I read somewhere that exceptions should only be used for "exceptional" cases, and running out of memory doesn't seem like an exceptional case to me..
内存不足对我来说似乎是一个非常特殊的情况:)
这种情况很难处理。您可能希望向您的应用程序的用户返回一个有意义的错误,但如果这是由于内存不足引起的问题,您甚至可能无法负担分配错误消息的内存。这确实有点像 22 条军规。
有一种防御性编程技术(有时称为内存降落伞或未雨绸缪基金),您可以在应用程序启动时分配一 block 内存。当您随后处理 bad_alloc
异常时,您释放了该内存,并使用可用内存正常关闭应用程序,包括向用户显示有意义的错误。这比崩溃好多了:)
关于c++ - 什么时候适合使用 C++ 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584599/