Avatar ·

如何在Rust中创建只能移动(move)但不能复制(Copy)的类型?

大家好!我最近开始学习Rust,遇到了所有权(ownership)以及Copy和Clone trait的概念。我似乎理解了基本类型(如i32或bool)实现了Copy,因此在赋值时它们会被复制,原始值仍然可用。而更复杂的类型(如String)只有Clone,在赋值时它们会被移动(move)。 但我有一个问题:我能否创建自己的类型(例如结构体),使其行为像String一样——即只能移动,而不能被意外复制?例如,我想创建一个表示唯一标识符或某种不应重复的资源的类型。如果我简单地声明一个结构体并添加derive(Clone, Copy),那么每次赋值时它都会被复制。如果不添加这些derive,会发生什么? 以下是一个让我困惑的代码示例: ```rust struct MyType { value: i32, } fn main() { let a = MyType { value: 1 }; ```