есть поле &’a mut Foo
Как написать метод fn foo(self) -> &’a mut Foo { … } ?
Обернуть ссылочное поле в ManuallyDrop и в методе вызывать на поле ManuallyDrop::take
1. как вам правильно сказали это делается через ManuallyDrop + take. если боитесь ManDrop попробуйте библиотеку SafeManuallyDrop из ящиков, она конечно для более интересных случаев делалась, но тут тоже ничего..(какие будут вопросы по ней сразу спрашивайте) она вас поругает если вы сделаете что-то эдакое. + если уберете def features и совместимость с std то и unsafe меток не понадобится... 2. с option как вам предлагают тоже +- подобное, но там доп сравнения (uncreable unchecked бы).. + еще что.. верно но верно и подороже.
Я хотел просто обойтись без лишних unsafe. ManuallyDrop я не боюсь. Как я сказал, крейт уже полон ансейфа в хотпасе и прочих местах, где без него никак.
Обсуждают сегодня