Rust HashMap键的寿命不够长
我正在尝试使用Rust HashMap键的寿命不够长,rust,borrow-checker,Rust,Borrow Checker,我正在尝试使用哈希映射,但有一条错误消息我不明白。下面是代码(): 这里发生了什么事?是否有解决办法?此问题已通过解决,从2018年起不应成为一个问题。下面的答案与使用旧版本锈菌的人相关 map比s寿命长,因此在map生命的某个时刻(就在销毁之前),s将无效。这可以通过改变它们的构造顺序和破坏顺序来解决: let s = Struct; let mut map: HashMap<String, &Trait> = HashMap::new(); map.insert("ke
哈希映射
,但有一条错误消息我不明白。下面是代码():
这里发生了什么事?是否有解决办法?此问题已通过解决,从2018年起不应成为一个问题。下面的答案与使用旧版本锈菌的人相关
map
比s
寿命长,因此在map
生命的某个时刻(就在销毁之前),s
将无效。这可以通过改变它们的构造顺序和破坏顺序来解决:
let s = Struct;
let mut map: HashMap<String, &Trait> = HashMap::new();
map.insert("key".to_string(), &s);
谢谢,行得通。但是你能解释一下为什么
map
比s
活得长吗?我认为变量是在作用域的末尾被销毁的,所以有没有具体的销毁顺序?“有没有具体的销毁顺序?”→ 与构造顺序相反,因为如果你有让x=1;设y=T(&x)
,y的析构函数可能需要访问x。哦,我明白了。我认为这是因为这些变量是在堆栈中分配的。
let s = Struct;
let mut map: HashMap<String, &Trait> = HashMap::new();
map.insert("key".to_string(), &s);
let mut map: HashMap<String, Box<Trait>> = HashMap::new();
let s = Struct;
map.insert("key".to_string(), Box::new(s));