3

我正在尝试设计一个需要动态分配一些内存的类..

我计划在构建过程中分配它需要的内存,但是我该如何处理失败的内存分配呢?我应该抛出异常吗?我在某处读到异常应该只用于“例外”情况,而内存不足对我来说似乎不是例外情况。

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

或者我应该改用异常?如果这些内存分配失败,该类将没有任何有用的事情可做。


编辑:共识似乎是内存不足是一个例外情况。

将看到如何去做这件事.. 谢谢.. :)

4

3 回答 3

15

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

我在某处读到异常应该只用于“例外”情况,而内存不足对我来说似乎不是例外情况。

内存不足对我来说似乎是一个非常特殊的情况:)

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

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

于 2009-02-25T03:33:46.850 回答
3

我认为内存不足(尤其是堆内存)是一个例外情况,如果你的类——以及你的应用程序——不能继续,我认为异常抛出/处理是一种非常合适和优雅的方法。

于 2009-02-25T03:33:31.483 回答
1

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

于 2009-02-25T03:32:24.483 回答