2020-05-08

内存泄漏问题

  • 内存泄漏问题的直接原因是因为new 了野指针之后没有delet
  • 在update current position之后 map kit 调用了prepareGuidanceData,目的是找到离当前位置最近的guidance data
  • prepareGuidanceData调用了NavInfoProviderImpl::getTrafficLights & NavInfoProviderImpl::getCarParks
  • 以NavInfoProviderImpl::getTrafficLights为例,是在调用时new出NaviEventOnPath中的数据指针
  • 然而并没有delete
  • 还发现DestEvent存在这个问题

解决方案:核心在于不允许野指针存在,决定对NaviEventProvider做一个重构

  • 首先在NaviInfoProvider中添加两个field trafficlight_events & carpark_events
  • 在NaviInfoGenerator中,route updated之后更新这两个field
  • 然后在每次get的时候根据当前车辆位置做一个过滤
  • 因此要重构PathReader::getAttributes,原因在于之前的实现只考虑了相对于当前车的offset,现在需要一个相对于Path的Offset接口