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 .used 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".