构造函数
创建一个自定义类型的实例的方法只有一种:先命名,然后一次性初始化它的所有成员:
和C++不同,Rust没有很多不同种类的构造函数,比如拷贝、默认、赋值、移动、还有其他各种构造函数。之所以这样的原因有很多,不过归根结底还是因为Rust显式化的设计哲学。
复制和拷贝构造函数也是不存在的,因为Rust中的类型有且仅有移动语义。只是将y
的字节移动到x
的变量中。Rust倒是提供了两种和C++中的copy语义相似的功能:Copy
和。Clone
很像是拷贝构造函数,但是它不会被隐式调用。你必须在需要复制的元素上显式调用clone
方法、Copy
是的一个特例,它的实现只会拷贝字节码。Copy类型在移动的时候会隐式地复制,但是因为Copy的定义,这个方法只是不把旧的值设置为未初始化而已——其实是一个no-op。
TODO:介绍“placement new”?