Skip to main content

UseCloned

Trait UseCloned 

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

Implementorsยง