说一下Rust中的 智能指针
Rust中的智能指针有三个,Box、Rc、Arc。其中:
Box是唯一所有权的指针,无额外开销。Rc是线程不安全的共享所有权的指针,由引用计数实现;配套的Weak不具有所有权, 只用来跟踪该指针指向的资源是否已被销毁。Arc是线程安全的共享所有权的指针,其用法与Rc基本相同。
说一下Rust中的
Cell
Cell提供了一种内部可变的机制。可以通过&self修改内部的值,而无需通过&mut self。它是零开销的,但它的修改只能整体地修改,不能通过&self拿到内部的&mut T。
另一种RefCell则可以用borrow或borrow_mut通过&self拿到内部的 &mut T。但它是有运行时开销的,内部会记录当前的借用状态,是未被借用,还是被可变借用,还是被不可变借用,以及被不可变借用了多少次。
解释一下Rust中Deref、Drop、Clone、Copy、Any这几个trait。
Deref是解引用语义,结合Rust中的自动解引用机制,可允许自定义包装类型如智能指针等变量像内部变量一样使用,但使用仅限于取&self,如果要取&mut self则需要DerefMut这个trait。Drop即析构函数。在变量生命周期结束时将自动执行drop以销毁。Clone是复制语义,可由用户实现,表示复制一个对象。任何可复制的类都可以实现这个trait。Copy也是复制语义,但与Clone不同的是,它只是一个标记,用来告诉编译器,该类型可以直接通过memcpy复制,而无需其他动作。Copy通常用于原生类型及其组合类型(结构体、元组、枚举等)。Any提供了一种简单的动态反射机制,要求类型必须具有'static的生命周期。在运行时可以downcast到任意类型,但若实际类型与要转换的类型不一致时,将返回Err。