@@ -9,7 +9,15 @@ use std::ptr::{Unique, NonNull, self};
9
9
use std :: mem;
10
10
use std :: ops :: {Deref , DerefMut };
11
11
use std :: marker :: PhantomData ;
12
- use std :: alloc :: {AllocRef , GlobalAlloc , Layout , Global , handle_alloc_error};
12
+ use std :: alloc :: {
13
+ AllocInit ,
14
+ AllocRef ,
15
+ Global ,
16
+ GlobalAlloc ,
17
+ Layout ,
18
+ ReallocPlacement ,
19
+ handle_alloc_error
20
+ };
13
21
14
22
struct RawVec <T > {
15
23
ptr : Unique <T >,
@@ -34,14 +42,16 @@ impl<T> RawVec<T> {
34
42
assert! (elem_size != 0 , " capacity overflow" );
35
43
36
44
let (new_cap , ptr ) = if self . cap == 0 {
37
- let ptr = Global . alloc (Layout :: array :: <T >(1 ). unwrap ());
45
+ let ptr = Global . alloc (Layout :: array :: <T >(1 ). unwrap (), AllocInit :: Uninitialized );
38
46
(1 , ptr )
39
47
} else {
40
48
let new_cap = 2 * self . cap;
41
49
let c : NonNull <T > = self . ptr. into ();
42
- let ptr = Global . realloc (c . cast (),
43
- Layout :: array :: <T >(self . cap). unwrap (),
44
- Layout :: array :: <T >(new_cap ). unwrap (). size ());
50
+ let ptr = Global . grow (c . cast (),
51
+ Layout :: array :: <T >(self . cap). unwrap (),
52
+ Layout :: array :: <T >(new_cap ). unwrap (). size (),
53
+ ReallocPlacement :: MayMove ,
54
+ AllocInit :: Uninitialized );
45
55
(new_cap , ptr )
46
56
};
47
57
@@ -52,7 +62,7 @@ impl<T> RawVec<T> {
52
62
mem :: align_of :: <T >(),
53
63
))
54
64
}
55
- let ( ptr , _ ) = ptr . unwrap ();
65
+ let ptr = ptr . unwrap (). ptr ;
56
66
57
67
self . ptr = Unique :: new_unchecked (ptr . as_ptr () as * mut _ );
58
68
self . cap = new_cap ;
0 commit comments