• 5203阅读
  • 4回复

关于new的一个小疑问 [复制链接]

上一主题 下一主题
离线xixu2008
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-15
关键词: newC++QT4
一般我们新new出来的对象,是不是要先检验其是否为0,但是我看到好多QTdemo中的例子直接使用,比如
openAction = new QAction(tr("open"));
openAction->setShortcus(QKeySequence::open);
在这里有没有必要先判断一下if(openAction ),然后再操作?
不太明白?请高手请教
离线dbzhang800

只看该作者 1楼 发表于: 2011-06-15
呵呵,这个属于纯C++的问题了,我也不太了解,大致说一点:

使用new分配内存出现内存不足的情况时,会抛出std::bad_alloc异常,你应该捕捉这个异常进行处理(另外还可以设置一个分配内存失败时的回调函数,在头文件<new>中提供了一个函数set_new_handler用来注册这个回调函数)

new 也有不抛出异常的形式,当失败时,返回一个NULL指针

openAction = new(std::nothrow) QAction("open");
然后你可以使用if语句去判断。

一般说,PC机上一般程序几乎不会发生new失败的情况,所以你见到的demo中也不会对此考虑太多。
离线kimtaikee

只看该作者 2楼 发表于: 2011-06-15
那你写个宏得了
#define SAFE_CREATE(Class,Var)  if(!Var) \
                                                                        {  \
                                                                             Var = new Class; \
                                                                         }

离线blackdire

只看该作者 3楼 发表于: 2011-06-15
C++标准规定new 失败应该抛出std::bad_alloc 异常,一般PC,打开虚拟内存,很难出现分配内存失败的现象。
C++ 还有不抛出异常的new 的版本,可以如下使用 char* p = new(std::nothrow) char;此时如果分配内存失败,则会返回0。程序可以检查返回值是否为0.
离线XChinux

只看该作者 4楼 发表于: 2011-06-15
写程序注意一些,对资源要求很多的情况下多判断下,一般情况下没那么苛刻的要求就不多做处理了
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个