我正在尝试设计一个需要动态分配一些内存的类.
我曾计划在构建期间分配它所需的内存,但是如何处理失败的内存分配?我应该抛出异常吗?我在某处读到异常应仅用于"特殊"情况,而内存耗尽对我来说似乎不是特例.
我应该在单独的初始化例程中分配内存并检查故障,然后优雅地销毁类实例吗?
或者我应该使用例外吗?如果这些内存分配失败,该类将没有任何用处.
编辑:共识似乎是内存不足是一个例外情况.
会看到如何去做这个..谢谢.. :)
假设您使用new来分配内存,并且没有覆盖new
运算符,std::bad_alloc
如果它无法正确分配内存,它将自动抛出异常.
我在某处读到异常应仅用于"特殊"情况,而内存耗尽对我来说似乎不是特例.
耗尽内存对我来说似乎是一个非常特殊的情况:)
处理这种情况非常困难.您可能希望向应用程序的用户返回有意义的错误,但如果由于内存不足而导致问题,您甚至无法负担分配错误消息的内存.这真的是一个抓住22的情况.
有一种防御性编程技术(有时称为内存降落伞或雨天基金),您可以在应用程序启动时分配一块内存.然后bad_alloc
,当您处理异常时,释放此内存,并使用可用内存正常关闭应用程序,包括向用户显示有意义的错误.这比崩溃要好得多:)