pub trait UseCloned: Clone { }
๐ฌThis is a nightly-only experimental API. (
ergonomic_clones
)Expand description
Trait for objects whose Clone
impl is lightweight (e.g. reference-counted)
Cloning an object implementing this trait should in general:
- be O(1) (constant) time regardless of the amount of data managed by the object,
- not require a memory allocation,
- not require copying more than roughly 64 bytes (a typical cache line size),
- not block the current thread,
- not have any semantic side effects (e.g. allocating a file descriptor), and
- not have overhead larger than a couple of atomic operations.
The UseCloned
trait does not provide a method; instead, it indicates that
Clone::clone
is lightweight, and allows the use of the .use
syntax.
ยง.use postfix syntax
Values can be .use
d by adding .use
postfix to the value you want to use.
โ
fn foo(f: Foo) {
// if `Foo` implements `Copy` f would be copied into x.
// if `Foo` implements `UseCloned` f would be cloned into x.
// otherwise f would be moved into x.
let x = f.use;
// ...
}
ยงuse closures
Use closures allow captured values to be automatically used.
This is similar to have a closure that you would call .use
over each captured value.
Dyn Compatibilityยง
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.