Update vector_invalidation.md (#131)

This commit is contained in:
Aleksandr
2025-11-09 00:40:17 +03:00
committed by GitHub
parent 5b99434e2c
commit 07999ba059
+2 -2
View File
@@ -68,7 +68,7 @@ void run_actions(std::vector<Action> actions) {
}
```
Этот простой паттерн с инвалидацией ссылок в векторе может очень легко спрятаться под слоем абстракций. Например — цикл обработки является публичным методом класса `TaskQueue`, а обработка одной задачи — его приватный метод. В таком случае изменение в одном методе, совершенно корректное в рамках него, приведен к UB из-за неявного влияния на другой метод.
Этот простой паттерн с инвалидацией ссылок в векторе может очень легко спрятаться под слоем абстракций. Например — цикл обработки является публичным методом класса `TaskQueue`, а обработка одной задачи — его приватный метод. В таком случае изменение в одном методе, совершенно корректное в рамках него, приведет к UB из-за неявного влияния на другой метод.
Кое-как защититься от подобной неприятности можно с помощью статических анализаторов, работающих с потоком исполнения программы. Также проблема почти точно ловится санитайзерами или утилитами проверки памяти (например, valgrind). Если, конечно, у вас достаточно хорошие тесты.
@@ -79,4 +79,4 @@ void run_actions(std::vector<Action> actions) {
## Полезные ссылки
1. https://baptiste-wicht.com/posts/2012/11/cpp-benchmark-vector-vs-list.html
2. https://stackoverflow.com/questions/6438086/iterator-invalidation-rules
2. https://stackoverflow.com/questions/6438086/iterator-invalidation-rules