描述:
我有一个list是定义如下:
typedef list<IBar**> LISTBAR;
LISTBAR m_listBars;
然后填充了一些元素:
IBarPtr spbar;
spbar = ...
m_listBars.insert(m_listBars.end(), &spbar);
最后,从list中取值的时候出现了错误,
请高手指点,谢谢
以下是取值代码
LISTBAR::iterator iteminlist;
IBarPtr spbar;
for (iteminlist = m_listBars.begin(); iteminlist != m_listBars.end(); iteminlist++)
{
spbar = (IBarPtr)*((IBar**)*iteminlist);
BSTR st;
spbar->get_Key(&st);
}
任何帮助或建议都非常感谢!
解决方案1:
IBarPtr spbar;
spbar = ...
m_listBars.insert(m_listBars.end(), &spbar);
这里可能有问题
为什么是list<IBar**>而不是list<IBar*>,你把&spbar插入list,而spbar是个临时变量,后面应该是把spbar释放了吧,而list中保存了一个无效的地址。。。所以错了,
建议使用list<IBar*>,另外要注意加入list要AddRef,删除要Release