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++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...