找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4073|回复: 2

闲聊一句ACE_NEW_RETURN

[复制链接]
发表于 2008-4-22 14:56:35 | 显示全部楼层 |阅读模式
他是这样定义的:
#    define ACE_NEW_RETURN(POINTER,CONSTRUCTOR,RET_VAL) \
   do { POINTER = new (ACE_nothrow) CONSTRUCTOR; \
     if (POINTER == 0) { errno = ENOMEM; return RET_VAL; } \
   } while (0)


第一,如果一个函数里有两处ACE_NEW_RETURN,那么当第二处ACE_NEW_RETURN失败return出来时,第一处的指针则没有释放。
这时我发现了可爱的auto_ptr。但随便一艘就发现ACE_wrappers\examples\APG\Streams\Answerer.cpp中virtual int open(...)中很多没有释放。

第二,我想知道do{}while(0)除了把多个语句括起来了之外,还有啥特别的意义没?
发表于 2008-4-23 09:01:04 | 显示全部楼层
open要是return -1主函数就退出了吧
 楼主| 发表于 2008-4-23 13:54:32 | 显示全部楼层
主函数退了,还是没有delete掉open()里的众多指针阿
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 19:51 , Processed in 0.017317 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表