@@ -164,16 +164,12 @@ impl<T: Default, N> GenericArray<T, N> where N: ArrayLength<T> {
164
164
/// Function constructing an array filled with default values
165
165
pub fn new ( ) -> GenericArray < T , N > {
166
166
unsafe {
167
- let mut res: GenericArray < T , N > = mem:: uninitialized ( ) ;
168
- if let Err ( e) = std:: panic:: catch_unwind ( std:: panic:: AssertUnwindSafe ( || {
169
- for r in res. iter_mut ( ) {
170
- ptr:: write ( r, T :: default ( ) )
171
- }
172
- } ) ) {
173
- std:: mem:: forget ( res) ;
174
- std:: panic:: resume_unwind ( e) ;
175
- } ;
176
- res
167
+ let mut res : NoDrop < GenericArray < T , N > > =
168
+ NoDrop :: new ( std:: mem:: uninitialized ( ) ) ;
169
+ for r in res. iter_mut ( ) {
170
+ ptr:: write ( r, T :: default ( ) )
171
+ }
172
+ res. into_inner ( )
177
173
}
178
174
}
179
175
@@ -192,9 +188,10 @@ impl<T: Clone, N> GenericArray<T, N> where N: ArrayLength<T> {
192
188
impl < T : Clone , N > Clone for GenericArray < T , N > where N : ArrayLength < T > {
193
189
fn clone ( & self ) -> GenericArray < T , N > {
194
190
unsafe {
195
- let mut res: GenericArray < T , N > = mem:: uninitialized ( ) ;
191
+ let mut res : NoDrop < GenericArray < T , N > > =
192
+ NoDrop :: new ( std:: mem:: uninitialized ( ) ) ;
196
193
for i in 0 ..N :: to_usize ( ) { ptr:: write ( & mut res[ i] , self [ i] . clone ( ) ) }
197
- res
194
+ res. into_inner ( )
198
195
}
199
196
}
200
197
}
0 commit comments