在Rust 编程语言中关于所有权的部分中,String
s 表示为具有 3 个字段的结构(3 个字段之一是指向实际字节向量的指针)。有一个例子:
let s1 = String::from("hello");
let s2 = s1;
这本书将其解释为复制包含在s1
to中的 3 字段结构s2
(但不是字节向量),然后将包含在其中的结构标记s1
为“无效”(图 4-4)。
为什么它以这种方式呈现,而不是呈现s2
为指向相同的顶级结构s1
,然后标记s1
为“无效”?
这种替代呈现是否会导致语义上的明显差异(或者甚至会导致问题)?如果不是,是不是因为它更好地反映了底层实现?如果是这样,为什么实现会进行这样的复制操作?