Memory management 如何转换长方体<;dyn性状>;向Rc<;dyn特质>;?

Memory management 如何转换长方体<;dyn性状>;向Rc<;dyn特质>;?,memory-management,rust,trait-objects,Memory Management,Rust,Trait Objects,我有一个函数,它接收一个框,需要将其转换为Rc,以在线程内共享只读所有权 使用一些T:Sized的Box,我们可以执行Rc::new(*my_Box),但不幸的是 下面是一个过于简单的例子,希望能澄清问题: 使用std::rc::rc; pub特征{} 发布结构Foo{} Foo{}的impl特征 fn main(){ 让trait_box:box=box::new(Foo{}); 让trait_rc:rc=rc::new(*trait_box);//->错误 } 我看到了关于公开内部RcB

我有一个函数,它接收一个
,需要将其转换为
Rc
,以在线程内共享只读所有权

使用一些
T:Sized
Box
,我们可以执行
Rc::new(*my_Box)
,但不幸的是

下面是一个过于简单的例子,希望能澄清问题:

使用std::rc::rc;
pub特征{}
发布结构Foo{}
Foo{}的impl特征
fn main(){
让trait_box:box=box::new(Foo{});
让trait_rc:rc=rc::new(*trait_box);//->错误
}

我看到了关于公开内部
RcBox
以支持在
Box
Rc
之间移动的内容,但现在它已经不可用了

有解决办法吗

或者,如果这种类型的转换是不可能的,那么建议使用什么方法来存储一个可以在某一点上发生变异的trait对象,然后在该点之后与程序的其余部分永久共享

使用
Rc
似乎有点过火,因为我知道到目前为止我只有一个所有者…

Rc
所以你可以使用:

让trait_rc:rc=trait_box.into();

Rc
因此您可以使用:

让trait_rc:rc=trait_box.into();

不是答案,但您可以使用
Rc
并将其保存在堆上。不是答案,但您可以使用
Rc
并将其保存在堆上