相关疑难解决方法(0)

有没有办法防止Weak :: new()过度分配?

当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

10
推荐指数
1
解决办法
195
查看次数

标签 统计

rust ×1