diff options
| author | Ulrik Sverdrup <bluss@users.noreply.github.com> | 2016-03-02 17:54:43 +0100 |
|---|---|---|
| committer | Ulrik Sverdrup <bluss@users.noreply.github.com> | 2016-03-02 18:05:41 +0100 |
| commit | 7ceafaee4f3d8ed2268b1659dd99a541d71689a3 (patch) | |
| tree | 65266bd844ac98acd2dc59b2cdb8b9666be1c1a4 | |
| parent | 1da364e98f46c828e5746be299b58b995e5f5007 (diff) | |
| download | rust-7ceafaee4f3d8ed2268b1659dd99a541d71689a3.tar.gz rust-7ceafaee4f3d8ed2268b1659dd99a541d71689a3.zip | |
Use ptr::drop_in_place in VecDeque::drop
Just like for Vec. This should benefit both non-optimized and optimized performance. Non-optimized since the intrinsic drop_in_place is easily removed, and optimized because iterating the slices is more efficient than using the VecDeque iterators.
| -rw-r--r-- | src/libcollections/vec_deque.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libcollections/vec_deque.rs b/src/libcollections/vec_deque.rs index f34fe2da7e8..3e48f14d387 100644 --- a/src/libcollections/vec_deque.rs +++ b/src/libcollections/vec_deque.rs @@ -70,7 +70,12 @@ impl<T: Clone> Clone for VecDeque<T> { impl<T> Drop for VecDeque<T> { #[unsafe_destructor_blind_to_params] fn drop(&mut self) { - self.clear(); + let (front, back) = self.as_mut_slices(); + unsafe { + // use drop for [T] + ptr::drop_in_place(front); + ptr::drop_in_place(back); + } // RawVec handles deallocation } } |
