当Rc :: downgrade()做什么时,为什么Weak :: new()工作的后续工作呢?
当试图以Weak::new()一种不需要它为底层类型分配内存的方式实现时,即使它永远不会被使用,我遇到了障碍.
定义RcBox<T>很简单:
struct RcBox<T: ?Sized> {
strong: Cell<usize>,
weak: Cell<usize>,
value: T,
}
Run Code Online (Sandbox Code Playgroud)
这里的目标是创建一个RcBox<T>实际上不包含任何内容的内容value.基本上,一个RcBox<()>.
然而,有一个障碍.*mut RcBox<()>是一个瘦指针,但*mut RcBox<T>可能是一个胖指针.我们有这个胖指针的数据部分,但有很多不同的胖指针的情况,所以试图合成其余的很难.
从链接的问题中可以看出,我可以使它适用于特征对象:
impl<T: ?Sized> Weak<T> {
pub fn new() -> Weak<T> {
unsafe {
let boxed = Box::into_raw(box RcBox {
strong: Cell::new(0),
weak: Cell::new(1),
value: (),
});
let ptr = if size_of::<*mut ()>() == size_of::<*mut T>() {
let ptr: …Run Code Online (Sandbox Code Playgroud) rust ×1