mirror of
https://github.com/Nekrolm/ubbook.git
synced 2026-06-09 13:14:18 +03:00
Update vector_invalidation.md (#131)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user