#    define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
   do { try { POINTER = new CONSTRUCTOR; } \
        catch (ACE_bad_alloc) { errno = ENOMEM; POINTER = 0; return RET_VAL; } \
   } while (0)
这里居然用了个循环,时不时有什么别的用以阿,要不不是画蛇添足了么?

解决方案 »

  1.   

    level1979 (岳麓飘湘) 一看就是湖南老乡.... 不懂有什么用...
      

  2.   

    我看这个函数为了演示new耗尽内存,循环申请内存知道无法满足需求为止
      

  3.   

    ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) 宏
      

  4.   

    http://blogger.org.cn/blog/more.asp?name=binaryluo&id=12576
      

  5.   

    一直以来do while(0)要结合break用,可惜上面代码没有
      

  6.   

    是为了防止误用宏而引发的副作用。那个循环只会执行一次的,与do...while(1)有本质的不同。
      

  7.   

    楼上正解。
    有时候这种用法还用来取代goto,如楼上的楼上所言。