[Chrome源码阅读] 理解ObserverList类的实现技巧

Chrome的ObserverList类在实现Observer模式时,针对遍历过程中可能发生的RemoveObserver操作,通过使用notify_depth_变量和NULL标记策略,确保遍历的正确性和安全性。在初始化迭代器时notify_depth_加1,移除观察者时若遍历中则将其指针置为NULL,遍历结束后进行紧凑化处理,有效处理动态移除观察者的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Chrome中大量用到了Observer模式,比较关键的类是ObserverList。

这个类的comment,提到了一个很关键的问题,就是在loop每个observer时,可能有observer尝试着被调用RemoveObserver,从列表中去除,而ObserverList内部是借用std::vector存储所有的observer,这样就会导致一个问题,就是std::vector::erase函数可能会invalidate所有的iterator,后续的notification就会失败。

//   A container for a list of observers.  Unlike a normal STL vector or list,
//   this container can be modified during iteration without invalidating the
//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值