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
//