Разбираем, почему
std::span — это невладеющий
view на память, и как обычный рост
std::vector (через
push_back/
emplace_back) может вызвать
reallocation, изменить адрес
data() и превратить старый
span в dangling (и, как следствие, в
UB). Показываем типичные грабли: инвалидирование при перевыделении, «устаревший» размер, разрушение элементов через
pop_back/
erase, и формулируем безопасный стиль:
span как параметр функции, а не как долгоживущее состояние.