使用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已经好久没有更新了,可能以后还会碰到,暂记备用。
阅读(3197) | 评论(7) | 转发(0) |