c – 捕获std :: bad_alloc的策略

前端之家收集整理的这篇文章主要介绍了c – 捕获std :: bad_alloc的策略前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我使用Qt很多与我的发展和爱它.通常使用Qt对象的设计模式是使用新的对象进行分配.

所有的例子(特别是由Qt设计器生成代码)绝对不会检查std :: bad_alloc异常.由于分配的对象(通常是小部件等)很小,这几乎不是一个问题.毕竟,如果你没有分配20个字节的东西,那么赔率可以解决这个问题.

目前,我已经采用了一种在try / catch中包装“大”(大于一页或两个大小)的策略.如果失败,我向用户显示一个消息,几乎任何更小,我只是让应用程序崩溃与std :: bad_alloc异常.

所以,我不知道这是什么学校呢?

检查每一个新操作是否有好的策略?或者只有我有望失败的潜力?

此外,处理嵌入式环境时,这显然是一个完全不同的故事,资源可以受到更多的限制.我在桌面应用程序的上下文中询问,但对涉及其他场景的答案也感兴趣.

解决方法

问题不在于“抓到哪里”,而是“捕获异常时该怎么办”.

如果你想检查,而不是用try catch包装,最好使用

#include <new>
    x = new (std::nothrow) X();
    if (x == NULL) {
        // allocation Failed
    }

我的惯例是

>在非交互式程序中,在主级别捕获显示一个足够的错误信息.
>在具有用户交互循环的程序中,我也捕获循环,以便用户可以关闭一些事情并尝试继续.

特别地,还有其他地方捕捉有意义,但它是罕见的.

猜你在找的C&C++相关文章