diff --git a/src/vec-final.md b/src/vec-final.md index 0f7b6b9..0c3f042 100644 --- a/src/vec-final.md +++ b/src/vec-final.md @@ -9,7 +9,15 @@ use std::ptr::{Unique, NonNull, self}; use std::mem; use std::ops::{Deref, DerefMut}; use std::marker::PhantomData; -use std::alloc::{AllocInit, AllocRef, GlobalAlloc, Layout, Global, handle_alloc_error}; +use std::alloc::{ + AllocInit, + AllocRef, + Global, + GlobalAlloc, + Layout, + ReallocPlacement, + handle_alloc_error +}; struct RawVec { ptr: Unique, @@ -39,9 +47,11 @@ impl RawVec { } else { let new_cap = 2 * self.cap; let c: NonNull = self.ptr.into(); - let ptr = Global.realloc(c.cast(), - Layout::array::(self.cap).unwrap(), - Layout::array::(new_cap).unwrap().size()); + let ptr = Global.grow(c.cast(), + Layout::array::(self.cap).unwrap(), + Layout::array::(new_cap).unwrap().size(), + ReallocPlacement::MayMove, + AllocInit::Uninitialized); (new_cap, ptr) }; @@ -52,7 +62,7 @@ impl RawVec { mem::align_of::(), )) } - let (ptr, _) = ptr.unwrap(); + let ptr = ptr.unwrap().ptr; self.ptr = Unique::new_unchecked(ptr.as_ptr() as *mut _); self.cap = new_cap;