</pre>使用中发现log4cpp1.1在使用自己NEW出来的category时正常,但是使用config时就出现内存泄露。<p></p><p>排查发现config创建与NEW创建使用了不一样的接口</p><p></p><p></p><pre name="code" class="cpp"> void Category::addAppender(Appender& appender) {
threading::ScopedLock lock(_appenderSetMutex);
{
AppenderSet::iterator i = _appender.find(&appender);
if (_appender.end() == i) {
_appender.insert(&appender);
_ownsAppender[&appender] = false;
}
}
}
void Category::addAppender(Appender* appender)
throw(std::invalid_argument) {
if (appender) {
threading::ScopedLock lock(_appenderSetMutex);
{
AppenderSet::iterator i = _appender.find(appender);
if (_appender.end() == i) {
// not found
_appender.insert(appender);
_ownsAppender[appender] = true;
}
}
} else {
throw std::invalid_argument("NULL appender");
}
}
两个接口的_ownsAppender[appender]值不一样,导致程序退出析构时出现内存泄露。
没有太多的时间去研究,简单的改成一样,都为TRUE值,暂时没有发现问题,后续再查。