mastodon.cardina1.red は、数々の独立したMastodonサーバーのうちのひとつです。サーバーに登録してFediverseのコミュニティに加わってみませんか。

サーバーの情報

3
人のアクティブユーザー

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> を保持するのも余計なアロケーションが増えて嫌だし

Add strong_count mutation methods to Rc by mystor · Pull Request #83476 · rust-lang/rust · GitHub
github.com/rust-lang/rust/pull

こっちを使えばええじゃろと。なるほど?

GitHubAdd strong_count mutation methods to Rc by mystor · Pull Request #83476 · rust-lang/rustmystor
らりお・ザ・何らかの🈗然㊌ソムリエ

ピンとこないのが、「一度の Rc::into_raw() で作成された *const T に複数回 Rc::from_raw() を呼び出すのは (仕様として) 許されているのか」なのよね。許されていそうな書きぶりではあるが明示はなさそうだし、仮に「Rc::into_raw() は Rc のインスタンスごとに別の値を返す可能性がある」という仕様だとしたら困る (そうではないとは思うが)。

doc.rust-lang.org/1.70.0/std/r
> Consumes the Rc, returning the wrapped pointer.

"wrapped pointer" は Rc のインスタンスを跨いで共通だろという認識でいいのかな。そういうことっぽくはあるが……

doc.rust-lang.orgRc in std::rc - RustA single-threaded reference-counting pointer. ‘Rc’ stands for ‘Reference Counted’.