У очереди появилась вставка по диапазону — и по дороге исправлена ошибка с неинициализированной памятью
30.12.2025У очереди на обоих концах появился метод замены диапазона элементов последовательностью — такой же, как у вектора и строки.
Почему очередь была особенной
Очередь хранится в кольцевом буфере, и её начало физически лежит в конце массива. Обычная замена диапазона с последующим сдвигом остальных элементов здесь требует учитывать, где обёрнут буфер, — и это источник ошибок.
Ошибка была в первом же появлении метода
В первой версии метода при переносе хвоста очереди реализация обращалась к памяти, которая не была инициализирована. Это неопределённое поведение: программа работает с тем, чего там нет.
Ошибку нашли и исправили ещё до того, как метод попал в стабильную поставку, но у пользователей ночных сборок код с этим поведением был. Исправление пришло через месяц, второе — через два с половиной.
Что это значит для пользователей
Если метод использовался из ночных сборок в период до исправления, стоит пересобрать: поведение могло быть произвольным там, где ожидалась обычная замена.
Оригинал
add VecDeque::splice
Упоминаний: 1 · Просмотров: 3