rust-course/basic/ownership/ownership #690
Replies: 118 comments 99 replies
-
|
写得太好啦,对入门及其友好 |
Beta Was this translation helpful? Give feedback.
-
|
所有权从s1 move 到s2后,s1在栈上的空间是在离开作用域后,这个空间才会被释放吗? |
Beta Was this translation helpful? Give feedback.
-
|
Rust:”可以帮你开辟变量空间,但用完必须马上还我“ |
Beta Was this translation helpful? Give feedback.
-
|
1 Rust 中每一个值都 有且只有 一个所有者(变量) 是否可以理解为 Rust 每一块内存空间都只能被 一个变量使用呢? |
Beta Was this translation helpful? Give feedback.
-
|
原文:
中文:
这里感觉翻译地特别到位,一个是没必要合并翻译,另一个是合并后含义有些改动。 |
Beta Was this translation helpful? Give feedback.
-
|
有个疑惑, 像 Swift 这种依赖于自动引用计数的, 他是通过在编译的时候插入内存管理代码, 感觉比 Rust 还轻松呢. |
Beta Was this translation helpful? Give feedback.
-
|
函数返回,不相当于离开了作用域吗
LAIN ***@***.***> 于2022年4月16日周六 17:34写道:
… 处于栈上的数据都是在函数返回时会释放吧,不一定是作用域
—
Reply to this email directly, view it on GitHub
<#690 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ADKZIT52TGBW57ZINQ3TLPLVFKCR7ANCNFSM5SIJA2HQ>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
|
我推测了一下理解下来的一个变量的生命周期:
这样的话, 形式上就实现了所谓的所有权. 这样理解正确吗? |
Beta Was this translation helpful? Give feedback.
-
|
小疑问: |
Beta Was this translation helpful? Give feedback.
-
这里的 “的” 应该用 “地” 😅 |
Beta Was this translation helpful? Give feedback.
-
|
和C++对比一下就是,Rust中基本类型的赋值操作表现出copy的行为,复合类型的赋值操作表现出move的行为,如果想让复合类型的赋值操作表现出copy的行为,就要显式的调用clone |
Beta Was this translation helpful? Give feedback.
-
|
|
Beta Was this translation helpful? Give feedback.
-
|
这个例子里: fn main() {
let x: &str = "hello, world";
let y = x;
println!("{},{}",x,y);
}
|
Beta Was this translation helpful? Give feedback.
-
|
Rust 的所有权实现了 RAII(Resource Acquisition Is Initialization programming) 原则,实际上 C++ 里面的智能指针也是按这个原则实现的。 |
Beta Was this translation helpful? Give feedback.
-
|
可以简单理解拷贝堆内存的东西就是深拷贝 拷贝栈内存的就是浅拷贝么 |
Beta Was this translation helpful? Give feedback.
-
|
写的真好啊,看了这么多 Rust 相关的书籍和资料,也就这里能一遍就懂~ |
Beta Was this translation helpful? Give feedback.
-
|
原变量在所有权转移后为什么不被视为未使用的变量呢 |
Beta Was this translation helpful? Give feedback.
-
|
确实,简单值不会被 move 。 fn add1(a: u32) -> u32
{
a + 1
}
fn main()
{
let a = 1;
println!("{}", add1(a));
println!("{}", add1(a))
} |
Beta Was this translation helpful? Give feedback.
-
|
看了两遍所有权这一节,我发现老师把简单的事情讲复杂了。。。。 首先应该从rust的类型开始,类型分为基础的(u32,i8,char,[],&str等等)和高级的(String,Vec等等)。 基础的都是静态的,都存在栈上,栈上的数据不存在所有权转移,我们把这个特性起了个名字叫Copy特征。 高级的都是动态的,都存在堆上,堆上的数据都会转移所有权,如果两个变量都想要该怎么办呢?使用clone()方法。 通篇只讲了一点,那就是:别的语言堆上的数据不转移所有权,所以不安全。rust的解决方案就是转移所有权。就这一点区别,仅此而已。 以上表述可能不是很准确,但大体是这个意思,看看老师举的例子是不是符合我说的几点?大家不要钻牛角尖出不来。 |
Beta Was this translation helpful? Give feedback.
-
|
想了半天,其实这个和C#/.net的值类型和引用类型几乎一样啊。值类型是的x=y是复制了一份,引用类型的x=y是引用了y(相当于指针)。rust与C#不同的是强制引用计数器始终是1而已,C#的引用计数器可以大于1。 |
Beta Was this translation helpful? Give feedback.
-
|
和 C++的拷贝(构造/赋值), 移动(构造/赋值) 语义相同 |
Beta Was this translation helpful? Give feedback.
-
|
有种被枪逼着用指针的感觉啊 |
Beta Was this translation helpful? Give feedback.
-
|
这个和c++中的移动语义有什么区别?🤔 |
Beta Was this translation helpful? Give feedback.
-
|
为什么所有权部分的练习题就已经涉及引用了呢。感觉在这里做练习的时候用到了很多没讲到的东西。如果作者是想2.3.1和2.3.2都学完一起做练习,那我想应当把这两部分的题合在一起。 |
Beta Was this translation helpful? Give feedback.
-
|
看起来感觉就像C++里的 std::move(), |
Beta Was this translation helpful? Give feedback.
-
|
无语和你说不下去,典型的Java思维。之前写Java看这个感觉脑子快不够用了 |
Beta Was this translation helpful? Give feedback.
-
|
rust还挺纯爱的 😎 |
Beta Was this translation helpful? Give feedback.
-
|
2026年4月,还有没有人一起和我一样老老实实啃教程的? |
Beta Was this translation helpful? Give feedback.
-
|
感觉本章需要解释一下这个问题: 这里 s1 是字符串类型 String 包含 <指针长度,有效字符串长度,字符串容器长度> |
Beta Was this translation helpful? Give feedback.
-
|
我前段时间在阅读《Rust程序设计》这本出版物,看的有点懵,但是里头有有句话是“能力不足怨不得书”,这本书对读者前置要求比较多,所以我去找另外的教程,发现了这个教程,这绝对是最适合新手阅读的Rust教程。👍 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
basic/ownership/ownership
https://course.rs/basic/ownership/ownership.html
Beta Was this translation helpful? Give feedback.
All reactions