MyGUI中的内存泄漏

来源:互联网 发布:java实现打印功能 编辑:程序博客网 时间:2024/06/06 16:29

1、sigslot.h中

void slot_disconnect(has_slots<mt_policy>* pslot)
{
    lock_block<mt_policy> lockblock(this);
    typename connections_list::iterator it = m_connected_slots.begin();
    typename connections_list::iterator itEnd = m_connected_slots.end();
 
    while (it != itEnd)
   {
          typename connections_list::iterator itNext = it;
         ++itNext;

         if ((*it)->getdest() == pslot)
         {
                  m_connected_slots.erase(it);
                  // delete *it;
        }

        it = itNext;
  }
}
改为

void slot_disconnect(has_slots<mt_policy>* pslot)
{
    lock_block<mt_policy> lockblock(this);
    typename connections_list::iterator it = m_connected_slots.begin();
    typename connections_list::iterator itEnd = m_connected_slots.end();
 
    while (it != itEnd)
   {
          typename connections_list::iterator itNext = it;
         ++itNext;

         if ((*it)->getdest() == pslot)
         {

                 delete *it;
                  m_connected_slots.erase(it);

        }

        it = itNext;
  }
}
值得说明的是此文件内有多处,犯了同样的错误。

2、这处比较隐蔽,其原因是

SeparatePanel中FACTORY_ITEM_ATTRIBUTE(SeparatePanel)定义了SeparatePanel的静态实例,并注册到了FactoryItemRegistrator中,存储在map中,同时在LayoutEditor工程中Application的Initialise函数创建了SeparatePanel对象,并注册到了FactoryItemRegistrator中。

 

0 0