Clippy lints / Performance
Clippy lint · Performance · checked with Clippy 0.1.99
clippy::replace_box: creating a new box with default content
What it meansDetects assignments of Default::default() or Box::new(value) to a place of type Box<T>. It is in the performance group and warns by default.
What you see
warning: creating a new box with default content --> main.rs:4:1 | 4 | b = Default::default(); | ^^^^^^^^^^^^^^^^^^^^^^ help: replace existing content with default instead: `*b = Default::default()` | = note: this creates a needless allocation = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#replace_box = note: `#[warn(clippy::replace_box)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
This incurs an extra heap allocation compared to assigning the boxed storage.
Code that could be written to run faster. Warns by default.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
let mut b = Box::new(1u32);
b = Default::default();
Write this instead
let mut b = Box::new(1u32);
*b = Default::default();
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::replace_box)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
replace_box = "allow"One run
cargo clippy -- -A clippy::replace-boxThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Detects assignments of Default::default() or Box::new(value)
to a place of type Box<T>.
Why is this bad?
This incurs an extra heap allocation compared to assigning the boxed storage.
Example
let mut b = Box::new(1u32);
b = Default::default();
Use instead:
let mut b = Box::new(1u32);
*b = Default::default();
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- large_enum_variantlarge size difference between variants
- redundant_allocationChecks for usage of redundant allocations anywhere in the code
- redundant_iter_clonedunneeded cloning of iterator items
- regex_creation_in_loopsChecks for regex compilation inside a loop with a literal
- result_large_errthe `Err`-variant returned from this function is very large
- sliced_string_as_bytescalling `as_bytes` after slicing a string
- slow_vector_initializationChecks slow zero-filled vector initialization
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::large_enum_variantlarge size difference between variantsRead it next →Did this answer your question?