gpt4 book ai didi

c++ - 您可以在迭代时更改 std::list 吗?

转载 作者:行者123 更新时间:2023-11-30 02:07:38 24 4
gpt4 key购买 nike

在以下函数中,IObserver 的 Process() 函数完全有可能尝试使用 this 指针的 将自身从通知列表中删除DeleteObserver().

这会导致迭代器出现问题(不足为奇!),有解决办法吗?还是我应该仔细看看我的设计?

void cButtonManager::DeleteObserver(IObserver *observer)
{
list<IObserver*>::iterator iter;
for (iter = m_ObserverList.begin(); iter != m_ObserverList.end(); ++iter)
{
if (*iter == observer)
{
// Found the specified observer in the list, delete it
m_ObserverList.erase(iter);
return;
}
}
}

void cButtonManager::NotifyObservers(void)
{
list<IObserver*>::iterator iter;
for (iter = m_ObserverList.begin(); iter != m_ObserverList.end(); ++iter)
{
(*iter)->Process(this);
}
}

例如,假设列表是订阅杂志的人的集合,Process() 函数是新杂志的发送;如果杂志的最新一期很糟糕,订阅者可能希望作为该问题的直接结果取消订阅。

最佳答案

编辑:

评论里有人纠正我,我改一下这个答案。但是不要投票,因为这是评论者的解决方案,不是我的。

(*iter++)->Process();

关于c++ - 您可以在迭代时更改 std::list 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7598443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com