PhantomData
在 rust 迹中是如何工作的?In the Nomicon it says the following:
为了告诉dropck我们确实拥有T类型的值,因此在我们删除时可能会删除一些T,我们必须添加一个额外的PhantomData来准确说明这一点.
对我来说,这似乎意味着当我们向一个 struct 中添加PhantomData
字段时,比如Vec
字段.
pub struct Vec<T> {
data: *mut T,
length: usize,
capacity: usize,
phantom: PhantomData<T>,
}
drop checker应禁止以下代码序列:
fn main() -> () {
let mut vector = Vec::new();
let x = Box::new(1 as i32);
let y = Box::new(2 as i32);
let z = Box::new(3 as i32);
vector.push(x);
vector.push(y);
vector.push(z);
}
由于x
、y
和z
的释放将发生在Vec
的释放上,我希望编译器会有一些抱怨.但是,如果运行上面的代码,则不会出现警告或错误.