std::nothrow的理想用法是什么
发布于 2011-01-18 05:56:48
我只会将它用作优化(或代码简化),否则我会在使用常规的新捕获std::bad_alloc时立即使用try-catch块。
这是一种非常罕见的情况,因为在调用点能够有效地处理内存不足的情况非常罕见。通常,分配内存是因为您需要它,而不是因为您非常想拥有它,但没有它也可以生活。在调用者链上传递空指针直到最终有人可以处理问题的代码不是惯用的C++。
然而,错误确实可以立即处理,这是可能发生的。例如,您可能处于这样一种情况:在给定足够的工作空间的情况下,您将使用一种算法或技术,而在没有足够的工作空间的情况下,您将使用另一种较慢的算法或技术。那么,您会直接使用new来分配这样的工作空间吗?通常不会。无论如何,您有时必须小心使用这种方法,因为如果您的操作系统过度使用,那么通常您不能在应用程序级别优雅地处理内存不足。
注意,涉及std::nothrow的表达式仍然可以抛出异常(特别是来自所分配的对象的任何构造函数),所以如果希望避免抛出异常,只需要一件事。您还必须确保构造函数不会抛出。
就我而言,完全不使用异常的C++程序的日子已经结束了。我想,如果由于某种特定的风格指南,他们为我恢复了,那么这可能是另一个需要nothrow新的原因。
发布于 2011-01-18 05:33:42
据我所知,几乎从来没有也没有。
发布于 2011-01-18 05:37:02
将C程序移植到C++。您的C程序在每个malloc之后都有所有这些检查,并且没有异常的概念。因此,将每个malloc更改为new (nothrow)要比将每个malloc包装在try块中要简单得多。
https://stackoverflow.com/questions/4718116
复制相似问题