【发布时间】:2020-12-18 09:38:24
【问题描述】:
std::vector 分配的内存可能会失败,但是构造函数不能返回任何东西,我们是否应该在每次声明std::vector 时使用try 和catch?
我知道这个问题可能已经回答了,但我没有找到任何东西,请评论链接。
【问题讨论】:
-
如果
std::vector抛出这样的异常,您是否希望能够做任何有意义的事情? -
关于异常的事情是,如果你没有在任何地方捕获它们,它们最终会终止你的程序。因此,用异常处理程序乱扔代码库会注意到但中止问题是不必要的冗长。
-
@FrançoisAndrieux 我可以想象这样一种情况,其中一个操作需要制作一个 DWORD 向量来表示 big 位图中的像素。如果由于 BAD_ALLOC 导致构造失败,那么我可以建议用户减小位图的大小。
-
您可以根据应用程序的设计在外部范围内处理问题。
-
@rsjaffe — 标记一个可以抛出异常的函数
noexcept通常是个坏主意。调用链中较高的函数可能需要进行清理,并且短路正常的堆栈展开可以防止这种情况发生。中止应用程序的决定是应用程序设计的问题,而不是本地编码。
标签: c++ vector error-handling dynamic-memory-allocation