#智能指针 #refcell #ref #cell #弱引用 #拥有引用

参照

智能指针:ARef,它允许比OwningRef更强的所有者擦除。Strong是内存高效的Rc + RefCell结合体。还有更多!

10 个版本 (5 个重大变更)

0.7.0 2022年1月29日
0.6.1 2021年8月21日
0.6.0 2019年11月17日
0.5.1 2018年11月8日
0.4.1 2016年11月26日

#996Rust 模式

每月44 次下载
gstuff 中使用

Apache-2.0/MIT

88KB
2K SLoC

Rust 的各种智能指针。

API Docs

Crates.io

特性

强 / 弱 / 引用 / 引用可变

这类似于 Rc<RefCell<T>>,但有一些不同的权衡

  • 可配置的开销(与固定的24或12相比 Rc<RefCell<T>>

  • 默认的4字节开销可为您提供最多1024个不可变引用、1024个强引用和1024个弱引用,但这可以通过几行代码轻松调整。

  • 中毒支持 - 在具有活动可变引用的panic之后,尝试获取可变或不可变引用将返回错误。可以通过调用unpoison()来撤销中毒。

还有一个线程安全的版本,类似于 Arc<RwSpinlock<T>>

ARef

ARef在OwningRef结束的地方继续,通过进一步抽象所有者。

这使得返回,例如,一个 ARef<str> 成为可能,并在调用者完成查看后释放所有者,而不必担心所有者是 StringRc<String>、一个 Ref<String>、一个简单的 &'static str 或其他东西。

它也是repr(C),因此可以跨越FFI边界进行传输(如果其目标是repr(C),也是如此)。

RMBA

RMBA 将一个 &T&mut TBox<T>Arc<T> 包装在单个指针的大小内。

如果你尝试存储一个不是32位对齐的 struct,程序会崩溃。

Bx, Bxm

这些只是围绕 Box 的简单包装,让你摆脱 DerefMove。

这样你可以在你的 API 中返回一个 Bx,并确信内部结构在内存中不会移动。(如果你处理 FFI 或 unsafe 代码,这可能很有帮助。)

许可证

Apache 2.0 或 MIT,由你选择。

依赖项