Есть, больше телодвижений
Ну то есть с точки зрения компилятора я ничего не нарушу, скопировав ссылку локально, и получив из копии as_mut ссылку на данные?
Нарушишь, у тебя будет две mut-ссылки на одно и то же место в памяти
А где вторая взялась?
Нет, я вызываю один раз. fn get_mut<'a, T>(pointer: &NonNull<T>) -> &'a mut T { let mut a_copy = *pointer; unsafe {a_copy.as_mut()} }
Тогда из shared ссылки получаешь мутабельную. А компилятор может этого не ожидать
Задача NonNull - гарантировать, что *mut T != 0. Учитывая, как работают с *mut T, могу сказать, что запрос на mut borrow абсолютно странный
История становится ещё более странной, когда узнаёшь, что NonNull реализует Copy
Обсуждают сегодня