скопировать и положить &[u8] в другую структуру. Пытаюсь склонировать вектор, превратить в слайс и забоксить. Но бокс требует сайзед. Есть какая-то ссылка, которая не требует сайзед или вобоще иначе надо проблему решать?
Так вектор, это и так почти box, зачем его ещё раз боксить через салайс?
Ну а че предлагаешь?
Не боксить. Куда ты собрался этот бокс запихнуть, если у тебя во второй структуре требуется слайс?
если ты хочешь забоксить данные в векторе, чтобы например не менять размер, то можешь сделать Box<[u8]> через https://doc.rust-lang.org/std/vec/struct.Vec.html#method.into_boxed_slice
А как мне из Box<[u8]> сделать &[u8]? Я совсем маладой
let vec2 = struct1.vec1.clone(); let struct2 = Struct2 {slice: &vec2};
Слайс ты можешь получить и из вектора, для этого необязательно делать бокс.
Чтобы бокса не осталось, а слайс был? Никак. Слайс указывает на память аллоцированную каким-то объектом, сам по себе он существовать не может.
.clone().into_boxed_slice().leak()
Вредные советы?
то есть мне никак не решить изначальную задачу в том виде, кк она есть? "У меня есть Vec<u8> в одной структуре, мне надо это скопировать и положить &[u8] в другую структуру"
https://t.me/rustlang_ru/387830
Для начала придумай где ты будешь хранить копию вектора всё то время на которое тебе нужен слайс. Что бы не было так, что слайс живёт дольше вектора.
На кучу хотел кинуть и всё( От неё взять ссылку
Куча - это тебе не мусорка, а камера хранения. Ты должен всё равно хранить "ключ" для ячейки в этой камере дольше чем её содержимое.
Ссылки - это статический механизм обеспечения нужного время жизни контейнера, на который указывает ссылка. Если библиотека требует ссылку, то Rc не поможет. В общем, нужен код, который не работает.
Может тебе лучше показать код, а то может оказаться что у тебя вот такая фигня: { let vec2 = struct1.vec1.clone(); let struct2 = Struct2 {slice: &vec2}; struct2.some_method(); // drop struct2 } И не понятно зачем в этом случае вообще заморачиваться боксами, мемори-ликами и прочим.
Обсуждают сегодня