вот такой код, в дебаге он работает, в релизе в последнем аргументе мусор, так что видимо, он создает висячий указатель. Я подумал, что проблема в том, что создаётся *временная* копия source_box с именем b и от нее берется ссылка, так что исправил "Some(&b)" на "Some(ref b)", чтобы получать доступ к оригинальному объекту. Это работает и в релизе, но клиппи это подчеркивает, и говорит, что это unnecessary borrow, и рекомендует это исправить просто на "Some(b)". Я попробовал, и это действительно работает и в релизе, но теперь я совсем запустался, поскольку тут же уже точно локальная копия создается, и от нее берется ссылка?
А для чего вообще делать &Box?
когда ты матчишь ссылку, поля в ветках тоже будут захвачены по ссылке
а &b при паттерн-матчинге делает обратное тому, что ты думаешь — он убирает ссылку, а не создаёт типа, был &T и вот этот & ты прописал в ветке, остался только T
Аааа. Это многое объясняет, спасибо большое :)
Обсуждают сегодня