Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3476324
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: C/C++

2007-12-05 15:25:47

不!(但如果你只有旧的编译器,你可能不得不。)

总是在每一个new 调用之后写显式的 NULL 测试实在是非常痛苦的.如下的代码是非常单调乏味的:

 Fred* p = new Fred();
 if (p == NULL)
   throw std::bad_alloc();

如果你的编译器不支持(或如果你拒绝使用), 你的代码可能会更单调乏味:

 Fred* p = new Fred();
 if (p == NULL) {
   std::cerr << "Couldn't allocate memory for a Fred" << endl;
   abort();
 }

振作一下。在 C++中,如果运行时系统无法为p = new Fred()分配 sizeof(Fred) 字节的内存,会抛出一个 std::bad_alloc 异常。与 malloc()不同,new 永远不会返回 NULL

因此你只要简单地写:

 Fred* p = new Fred();   // 不需要检查 p 是否为 NULL

然而,如果你的编译器很古老,它可能还不支持这个。查阅你的编译器的文档找到“new”。如果你只有古老的编译器,就必须。

阅读(678) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~