他是这样定义的:
# 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(...)中很多没有释放。