使用vc2008调用gloox测试example,发现有内存泄露。跟踪发现出在Client里面:
void Client::init()
{
m_rosterManager = new RosterManager( this );
m_disco->setIdentity( "client", "bot" );
registerStanzaExtension( new ResourceBind( 0 ) );
registerStanzaExtension( new Capabilities() );
m_presenceExtensions.push_back( new Capabilities( m_disco ) );//这一行引起的
}
最后跟踪,的确没看到在哪里释放它。
手动在析构函数里加上:
Client::~Client()
{
StanzaExtensionList::const_iterator it = m_presenceExtensions.begin();
for( ; it != m_presenceExtensions.end(); ++it )
{
delete (*it);
}
m_presenceExtensions.clear();
delete m_rosterManager;
delete m_auth;
}
内存泄露消失了。
不过,以gloox这么庞大的用户群体,如果问题这么明显,肯定早就发现了。只能推测可能由系统,SDK或其他开发环境引起的(当前环境是XP+vc2008,不过系统中安装了众多其他开发工具)。gloox已经好久没有更新了,可能以后还会碰到,暂记备用。
阅读(3386) | 评论(7) | 转发(0) |