MiddleТеорияИногдаЕщё не отвечали
Как защитить срез от разделения backing array с другим срезом?
Сделайте независимую копию через copy(dst, src) в свежевыделенный срез или ограничьте ёмкость трёхиндексным выражением s[low:high:max], чтобы следующий append был вынужден реаллоцировать, а не перезаписывать общие элементы. Возвращайте из API копии, а не под-срезы, чтобы вызывающий не менял ваш backing array.
- ✗Путать передачу по указателю с копированием — указатель всё равно достаёт тот же backing array
- ✗Забывать третий индекс —
s[low:high]сохраняет ёмкость родителя, поэтомуappendвсё ещё алиасит - ✗Возвращать из API под-срез, позволяя вызывающим менять внутренний backing array
- →Почему
copyтребует, чтобы у приёмника была достаточная длина, а не ёмкость? - →Чем
s[low:high:max]отличается отs[low:high]для следующегоappend?
</content>