Здравствуйте, _NN_, Вы писали:
S>>Но еще есть вопрос наглядности — а это тоже важно. Чтобы получать нужную часть пакета — одной удобной строчкой с внятным названием — т.е. чтобы вся магия манипуляции с байтами — была не видна при взаимодействии.
_NN>Секунду, вам нужна часть вектора или весь ?
_NN>Невозможно забрать только часть без копирования.
Части вектора в виде span — беру пока объект живой и владеет вектором — для удобства. Можно было бы все те же операции проделать до создания объекта — но это не нагладно было бы и не дешевле по ресурсам.
S>>Но в векторе, все-же, кой-чего нет — это простой возможности забрать владение на data у самого вектора.
_NN>Т.е. вы хотите, чтобы у вектора был интерфейс с возможностью отдать владение ?
_NN>Самым простым вариантом тогда будет использование unique_ptr<byte[]> , у него как раз есть release, который именно это и делает:
_NN>_NN>void f(char* p)
_NN>{
_NN> delete[] p;
_NN>}
_NN>int main()
_NN>{
_NN> std::unique_ptr<char[]> up = std::make_unique<char[]>(10);
_NN> char* p = up.release(); // отдаём владение
_NN> f(p);
_NN>}
_NN>
_NN>Ну или свой вектор тогда можно сделать как вариант.
Ну да, вроде еще можно кастомный аллокатор для std::vector.