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

解决方案 »

  1.   

    ec++ 和 mc++ 里面有专门的论述
    我就不挵斧了
      

  2.   

    new会调用构造函数,导致结构异常
    可以用malloc只申请空间
      

  3.   

    4:设置 _set_new_handler,释放可用内存或直接报错很少需要处理new时出异常的情况,到底是什么引起的?内存不够?
      

  4.   

    实现上程序在运行上很好,没有发生异常,但是new可能会出现异常,我提问的意思是我们怎么样来处理这个可能的异常。
      

  5.   

    基本上,如果new出异常,系统基本上是老牛拉破车了
    如果需要,换个好的设计,如内存池之类的
      

  6.   

    在你需要的地方try catch吧,确实除了内存不够这种情况,其它的还没有见过抛异常的情况
      

  7.   

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

  8.   

    用nothrow或者下面这种
    class class1
    {
    };
    class1* c(NULL);
    c=new class1();// 这里?
    if (c==NULL)
    {
      //不成功!return之类的处理。
    }
      

  9.   

    如果new出异常.那么狗系统可以去蓝屏了.
      

  10.   

    把new得到的指针存放起来,可以在析构的时候删除就行
      

  11.   

    在你需要的地方try catch吧,确实除了内存不够这种情况,其它的还没有见过抛异常的情况
      

  12.   

    那什么时候去深究,一直不去考虑?那么MSDN上就是费话了?
      

  13.   

    如果基本的检测,那就std::nothrow ,来检测内存不足等
    如果构造失败,那么就try catch等来捕获吧,具体情况需要自己分析,如果觉得应用场合可能出现这种问题概率很大,那就自己捕获等来处理吧
      

  14.   

    最简单的方式可以这么处理class class1
    {
    };class1* c(NULL);
    c=new  (nothrow)class1();//这里???if(c == NULL)
    {
        内存不够
    }其实,这个问题值得深究,很多写过好多年代码的人,未必了解,不是做技术的好态度啊啊啊啊啊