sokiiya 发表于 2008-4-22 14:56:35

闲聊一句ACE_NEW_RETURN

他是这样定义的:
#    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)除了把多个语句括起来了之外,还有啥特别的意义没?

Joe 发表于 2008-4-23 09:01:04

open要是return -1主函数就退出了吧

sokiiya 发表于 2008-4-23 13:54:32

主函数退了,还是没有delete掉open()里的众多指针阿
页: [1]
查看完整版本: 闲聊一句ACE_NEW_RETURN