ACE网络编程之ACE_NEW_RETURN,ACE_NEW,ACE_NEW_NORETURN
来源:互联网 发布:信阳 知乎 编辑:程序博客网 时间:2024/06/05 18:21
ACE源码OS_Memory.h是这样定义的。
宏ifelse对平台的不同进行了分离,每个平台下都有三种new的方法,他们的区别是return。
# 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)# define ACE_NEW(POINTER,CONSTRUCTOR) \ do { POINTER = new(ACE_nothrow) CONSTRUCTOR; \ if (POINTER == 0) { errno = ENOMEM; return; } \ } while (0)# define ACE_NEW_NORETURN(POINTER,CONSTRUCTOR) \ do { POINTER = new(ACE_nothrow) CONSTRUCTOR; \ if (POINTER == 0) { errno = ENOMEM; } \ } while (0)# else# 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)# define ACE_NEW(POINTER,CONSTRUCTOR) \ do { try { POINTER = new CONSTRUCTOR; } \ catch (ACE_bad_alloc) { ACE_del_bad_alloc errno = ENOMEM; POINTER = 0; return; } \ } while (0)# define ACE_NEW_NORETURN(POINTER,CONSTRUCTOR) \ do { try { POINTER = new CONSTRUCTOR; } \ catch (ACE_bad_alloc) { ACE_del_bad_alloc errno = ENOMEM; POINTER = 0; } \ } while (0)# endif /* ACE_HAS_NEW_NOTHROW */#else /* ACE_NEW_THROWS_EXCEPTIONS */# define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \ do { POINTER = new CONSTRUCTOR; \ if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \ } while (0)# define ACE_NEW(POINTER,CONSTRUCTOR) \ do { POINTER = new CONSTRUCTOR; \ if (POINTER == 0) { errno = ENOMEM; return; } \ } while (0)# define ACE_NEW_NORETURN(POINTER,CONSTRUCTOR) \ do { POINTER = new CONSTRUCTOR; \ if (POINTER == 0) { errno = ENOMEM; } \ } while (0)以上是用宏定义替换的表达式,功能都是用一个POINTER指针new一个CONSTRUCTOR实例,内部做了一些错误信息的标志和异常处理。
宏ifelse对平台的不同进行了分离,每个平台下都有三种new的方法,他们的区别是return。
每个宏定义都用到了do{}while(0),是因为宏只能替换一句表达式,而你用do{}while(0)可以方便的把多个表达式集中起来。
转自:http://www.cppblog.com/cxiaojia/archive/2013/03/26/198838.html
- ACE网络编程之ACE_NEW_RETURN,ACE_NEW,ACE_NEW_NORETURN
- ACE_NEW_RETURN----ACE安全机制的使用
- ace网络编程参考
- ACE网络编程模式
- ACE网络编程开发
- ACE网络编程
- ACE网络编程 --ACE库入门:中篇-ACE程序员教程
- 使用ACE进行网络编程
- 使用ACE进行网络编程
- 使用ACE进行网络编程
- ACE网络编程模式比较
- 使用ACE进行网络编程
- ACE网络编程模式比较
- ACE的Socket网络编程
- ACE网络编程开发网
- 基于ACE网络编程配置
- ACE网络编程模式比较
- 基于ACE的网络服务端通讯编程
- 反对抄袭 正解spring的@Autowired 不要相信网上的错误版本
- 摘自《C程序设计语言》的一种简单高效的qsort
- Binutils-2.23.2
- 用php发送手机短信
- POJ-1733-Parity game
- ACE网络编程之ACE_NEW_RETURN,ACE_NEW,ACE_NEW_NORETURN
- 页面打开时加特效(百叶窗什么的....)
- Comet:基于 HTTP 长连接的“服务器推”技术
- 6.13. Binutils-2.15.94.0.2.2
- SEO贵在持之以恒 持之以恒
- Ubuntu下 Java 环境变量设置
- HDU 4272LianLianKan 2012长春网络赛F题(思维) 暴力,dfs可以水过,正解是状态压缩dp
- HDU-3038-How Many Answers Are Wrong
- CDOJ 1644 KKX Sequence