Rc::from_raw のコストは十分小さいと考えていいのかな
Rc::into_raw() でリークさせた *const Rc<_> に対して、元の Rc の所有権を消費することなく clone して新たな Rc を作りたいんだけど、一旦 Rc::from_raw() で戻してから clone して改めて into_raw() する必要があるのか?
Rc::as_ptr からでは Rc の復元ができないっぽいんだよな (refcount 情報が残っていないのでそれはそう)
かといって Box<Rc<T>> を作っといて *mut Rc<T> を保持するのも余計なアロケーションが増えて嫌だし
Feature: `Rc::clone_raw` (and for Arc) · Issue #48108 · rust-lang/rust · GitHub
https://github.com/rust-lang/rust/issues/48108
あっ……はい。
Add strong_count mutation methods to Rc by mystor · Pull Request #83476 · rust-lang/rust · GitHub
https://github.com/rust-lang/rust/pull/83476
こっちを使えばええじゃろと。なるほど?
ピンとこないのが、「一度の Rc::into_raw() で作成された *const T に複数回 Rc::from_raw() を呼び出すのは (仕様として) 許されているのか」なのよね。許されていそうな書きぶりではあるが明示はなさそうだし、仮に「Rc::into_raw() は Rc のインスタンスごとに別の値を返す可能性がある」という仕様だとしたら困る (そうではないとは思うが)。
https://doc.rust-lang.org/1.70.0/std/rc/struct.Rc.html#method.into_raw
> Consumes the Rc, returning the wrapped pointer.
"wrapped pointer" は Rc のインスタンスを跨いで共通だろという認識でいいのかな。そういうことっぽくはあるが……