Назад к вопросам
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>