作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不认为仅在所有权范围内就可以完全解释 rust 的垃圾收集。
我已经用谷歌搜索了,这就是我所拥有的。
let a = String::from("first");
a = String::from("second");
在上述情况下,第一个字符串数据在第二次分配时会自动删除。
但是,自那时以来,我无法搜索更多信息。
struct A {
a: String,
b: String
}
let mut x = A {
a: String::from("first"),
b: String::from("second")
}
x.a = String::from("reassignment"); // first string drops here
同样,我们都知道,如果删除了一个变量,它将删除其所有内容。 (如下)
{
let a = vec!(String::from("first"), String::from("second"));
} // all the strings are dropped here.
好的。那更复杂的东西呢?
Box<T>
或
HashMap<String, i32>
...等...这是消耗其他任何数据所有权的数据。
最佳答案
如果您想了解更多并观察自动删除,那么我建议为一种类型实现Drop trait。 Rust没有任何垃圾收集器,但是编译器会执行添加指令的工作,以在对象超出范围时清除它们。
检查此Rust RAII
如果实现Drop trait并在drop fn中使用日志记录或打印,则您知道它何时超出范围并被回收。在下面的示例中,观察对象超出范围时何时调用Data struct的drop方法。
use std::collections::HashMap;
#[derive(Debug)]
struct Data{
val: String
}
impl Drop for Data {
fn drop(&mut self) {
println!("Dropping for {:?}", self.val);
}
}
#[async_std::main]
async fn main() -> std::io::Result<()> {
{
let mut dataref = Data{val: "d0".to_string()};
{
let data = Data{val: "d1".to_string()};
let data2 = Data{val: "d2".to_string()};
dataref = data2;
println!("scope marker 1");
}
println!("scope marker 2");
let mut map = HashMap::new();
map.insert("k1".to_string(), Data{val:"v1".to_string()});
println!("Before chaning for k1");
map.insert("k1".to_string(), Data{val:"v1".to_string()});
println!("Changed k1");
}
Ok(())
}
关于memory-management - 想知道没有人引用的自动数据删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65453063/
使用登录后,我想吐出用户名。 但是,当我尝试单击登录按钮时, 它给了我力量。 我看着logcat,但是什么也没显示。 这种编码是在说。 它将根据我在登录屏幕中输入的名称来烘烤用户名。 不会有任何密码。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a min
我是一名优秀的程序员,十分优秀!