ACE_NEW_RETURN的意思

看到好多ACE程序都使用了ACE_NEW_RETURN,一直不知道干嘛用的,再加上前一段时间比较忙,没有对每条语句进行深究。
今天终于找到了ACE_NEW_RETURN的出处,有三个定义,都在OS_Memory.h中定义,可能是用于适应不同的平台而作的吧。下面的这个是最容易看懂的,用了try-catch语句。
 
#    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)
 
ACE_NEW_RETURN的定义是:
ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL)
ACE_NEW_RETURN对应翻译是:
try
{
      POINTER=new CONSTRUCTOR;
}
catch(ACE_bad_alloc)
{
       errno=ENOMEM;
       POINTER=0;
       return RET_VAL;
}
意思就是用new动态生成一个参数2类型的空间,并将空间的首地址副给第一个参数。如果有错误产生则将第一个参数的值设为空,并返回值RET_VAL。不过不知道为什么Doung为什么喜欢在副值之前用do-while语句,莫非这样做有什么好处?
另两个定义是
#    define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) /
   do { POINTER = new (ACE_nothrow) CONSTRUCTOR; /
     if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } /
   } while (0)
# define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) /
   do { POINTER = new CONSTRUCTOR; /
     if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } /
   } while (0)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值