From e179966c4ed38c67727e029ddb20e20d62caf96f Mon Sep 17 00:00:00 2001 From: KaiserY Date: Thu, 16 Mar 2017 00:02:13 +0800 Subject: [PATCH] wip add ch15-05 --- docs/ch04-01-what-is-ownership.html | 2 +- docs/ch04-02-references-and-borrowing.html | 2 +- docs/ch15-03-drop.html | 27 ++++ docs/ch15-04-rc.html | 101 +++++++++++++- docs/ch15-05-interior-mutability.html | 27 +++- docs/print.html | 155 ++++++++++++++++++++- src/ch04-02-references-and-borrowing.md | 2 +- src/ch15-03-drop.md | 41 ++++++ src/ch15-04-rc.md | 133 ++++++++++++++++++ src/ch15-05-interior-mutability.md | 29 ++++ 10 files changed, 512 insertions(+), 7 deletions(-) diff --git a/docs/ch04-01-what-is-ownership.html b/docs/ch04-01-what-is-ownership.html index 04f732f..1106852 100644 --- a/docs/ch04-01-what-is-ownership.html +++ b/docs/ch04-01-what-is-ownership.html @@ -245,7 +245,7 @@ let y = x; println!("x = {}, y = {}", x, y); -

他们似乎与我们刚刚学到的内容向抵触:没有调用clone,不过x依然有效且没有被移动到y中。

+

他们似乎与我们刚刚学到的内容相抵触:没有调用clone,不过x依然有效且没有被移动到y中。

原因是像整型这样的在编译时已知大小的类型被整个储存在栈上,所以拷贝其实际的值是快速的。这意味着没有理由在创建变量y后使x无效。换句话说,这里没有深浅拷贝的区别,所以调用clone并不会与通常的浅拷贝有什么不同,我们可以不用管它。

Rust 有一个叫做Copy trait 的特殊注解,可以用在类似整型这样的储存在栈上的类型(第十章详细讲解 trait)。如果一个类型拥有Copy trait,一个旧的变量在(重新)赋值后仍然可用。Rust 不允许自身或其任何部分实现了Drop trait 的类型使用Copy trait。如果我们对其值离开作用域时需要特殊处理的类型使用Copy注解,将会出现一个编译时错误。

那么什么类型是Copy的呢?可以查看给定类型的文档来确认,不过作为一个通用的规则,任何简单标量值的组合可以是Copy的,任何不需要分配内存或类似形式资源的类型是Copy的,如下是一些Copy的类型:

diff --git a/docs/ch04-02-references-and-borrowing.html b/docs/ch04-02-references-and-borrowing.html index 6529d44..c3a1e7e 100644 --- a/docs/ch04-02-references-and-borrowing.html +++ b/docs/ch04-02-references-and-borrowing.html @@ -262,7 +262,7 @@ for it to be borrowed from.

引用的规则

简要的概括一下对引用的讨论:

    -
  1. 特定时间,只能拥有如下中的一个:
  2. +
  3. 在任意给定时间,只能拥有如下中的一个: