use*_*301 2 memory-management vector rust drop
我正在尝试实现一个向量。我发现这段代码是作者释放向量的地方:
impl<T> Drop for MyVec<T> {
fn drop(&mut self) {
if self.cap != 0 {
while let Some(_) = self.pop() { }
let layout = Layout::array::<T>(self.cap).unwrap();
unsafe {
alloc::dealloc(self.ptr.as_ptr() as *mut u8, layout);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我知道这些元素是连续存储的并且该dealloc函数将清除内存中的整个序列时,为什么要在第四行逐步删除所有元素?
该向量是否存储指针并且这些元素是否写入随机位置?单独删除元素的目的是什么?
想想一个MyVec<String>. 向量中的每个字符串都有自己单独的分配来保存字符串数据。
向量只能释放它自己分配的内存,该内存保存字符串对象,但不能释放字符串依次保存的数据。因此它必须单独要求每个字符串释放其额外资源,而这正是所做的drop。
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |