ACE_NEW_RETURN在ACE代码中使用了很多,随处可见,看一下代码就知道这个用处了
说白了就是生成一个对象,然后有个异常处理,加入了安全机制
define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL)
do {
try {
POINTER = new CONSTRUCTOR;
}
catch (ACE_bad_alloc)
{
ACE_del_bad_alloc errno = ENOMEM;
POINTER = 0;
return RET_VAL;
}
} while (0)
从代码可以看到,是将第二个参数new一个对象赋给第一个参数,如果有异常。返回第三个参数并且POINTER =0;
另外两个定义:
define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
do { POINTER = new CONSTRUCTOR; \
if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \
} while (0)
if defined (ACE_HAS_NEW_NOTHROW)
# define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
do { POINTER = new (ACE_nothrow) CONSTRUCTOR; \
if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \
} while (0)