关于new用法疑惑

北京的雾霾天 2011-03-04 05:13:56
new在C++建立对象时可能引发异常,对这个异常怎样处理?

class class1
{
};

class1* c(NULL);
c=new class1();//这里???


1:给new加上try...catch或在调用的上级中加上try...catch?
2:重定义new操作符,以便在不成功时返回空?
3:给类class1定义void* operator new(size_t sz)?
4:设置 _set_new_handler,释放可用内存或直接报错?
5:改用malloc?
6:看情况综合以上?
6:还有其它高见?

参见:http://topic.csdn.net/u/20110304/16/ed75dcde-7670-4da9-92fb-2f283aba66d8.html?10192135
...全文
263 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 hbxtlhx 的回复:]

引用 16 楼 heksn 的回复:
以及基本不可能发生的情况 没必要去深究

那什么时候去深究,一直不去考虑?那么MSDN上就是费话了?
[/Quote]
如果基本的检测,那就std::nothrow ,来检测内存不足等
如果构造失败,那么就try catch等来捕获吧,具体情况需要自己分析,如果觉得应用场合可能出现这种问题概率很大,那就自己捕获等来处理吧
北京的雾霾天 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 heksn 的回复:]
以及基本不可能发生的情况 没必要去深究
[/Quote]
那什么时候去深究,一直不去考虑?那么MSDN上就是费话了?
wshcdr 2011-03-07
  • 打赏
  • 举报
回复
最简单的方式可以这么处理

class class1
{
};

class1* c(NULL);
c=new (nothrow)class1();//这里???

if(c == NULL)
{
内存不够
}

其实,这个问题值得深究,很多写过好多年代码的人,未必了解,不是做技术的好态度啊啊啊啊啊
  • 打赏
  • 举报
回复
以及基本不可能发生的情况 没必要去深究
yiruirui0507 2011-03-04
  • 打赏
  • 举报
回复
在你需要的地方try catch吧,确实除了内存不够这种情况,其它的还没有见过抛异常的情况
crjwlaq 2011-03-04
  • 打赏
  • 举报
回复
把new得到的指针存放起来,可以在析构的时候删除就行
smwhotjay 2011-03-04
  • 打赏
  • 举报
回复
如果new出异常.那么狗系统可以去蓝屏了.
delphiwcdj 2011-03-04
  • 打赏
  • 举报
回复
用nothrow或者下面这种
class class1
{
};
class1* c(NULL);
c=new class1();// 这里?
if (c==NULL)
{
//不成功!return之类的处理。
}
delphiwcdj 2011-03-04
  • 打赏
  • 举报
回复
可能方法有很多种,还是选个自己喜欢的方式
手机写程序 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tandyt 的回复:]
引用 7 楼 ouyh12345 的回复:
基本上,如果new出异常,系统基本上是老牛拉破车了
如果需要,换个好的设计,如内存池之类的


有时候资源就只有老牛和破车。。。。。
[/Quote]
你还有毛驴。

应该看构造函数里神马导致的异常,如果是内存不够了,malloc也不行。

jwybobo2007 2011-03-04
  • 打赏
  • 举报
回复
在你需要的地方try catch吧,确实除了内存不够这种情况,其它的还没有见过抛异常的情况
TandyT 2011-03-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ouyh12345 的回复:]
基本上,如果new出异常,系统基本上是老牛拉破车了
如果需要,换个好的设计,如内存池之类的
[/Quote]

有时候资源就只有老牛和破车。。。。。

ouyh12345 2011-03-04
  • 打赏
  • 举报
回复
基本上,如果new出异常,系统基本上是老牛拉破车了
如果需要,换个好的设计,如内存池之类的
stonewater 2011-03-04
  • 打赏
  • 举报
回复

内存不足,或者构造函数导致异常
北京的雾霾天 2011-03-04
  • 打赏
  • 举报
回复
实现上程序在运行上很好,没有发生异常,但是new可能会出现异常,我提问的意思是我们怎么样来处理这个可能的异常。
ouyh12345 2011-03-04
  • 打赏
  • 举报
回复
4:设置 _set_new_handler,释放可用内存或直接报错

很少需要处理new时出异常的情况,到底是什么引起的?内存不够?
zyyoung 2011-03-04
  • 打赏
  • 举报
回复
new会调用构造函数,导致结构异常
可以用malloc只申请空间
真相重于对错 2011-03-04
  • 打赏
  • 举报
回复
ec++ 和 mc++ 里面有专门的论述
我就不挵斧了

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧