Tag Archives: UE4

UE4迭代器删除元素

在一个Unreal Engine的项目中,发现TArray<AActor>迭代器循环,actor::destroy会在数组中移除该元素,和element.remove()一样, 引起迭代器失效,很奇怪。经调查原来是因为在Actor::endplay里代码把自身从数组中移除了。我因为之前没有在迭代器里删除过元素,在查这个Bug过程中,我看了下数组Remove的代码。

TArray Remove Implementation

C++ vector::erase操作删除一个元素会导致后面所有的元素都会向前移动一个位置,这些元素的地址发生了变化,所以当前位置到容器末尾元素的所有迭代器全部失效。

这里,由于移除元素,移除元素后面的元素都向前移动,所以导致第二个元素3无法被移除掉。