【发布时间】:2023-01-12 11:14:36
【问题描述】:
引自vec::push 实现:
pub fn push(&mut self, value: T) {
// This will panic or abort if we would allocate > isize::MAX bytes
// or if the length increment would overflow for zero-sized types.
if self.len == self.buf.capacity() {
self.buf.reserve_for_push(self.len);
}
unsafe {
let end = self.as_mut_ptr().add(self.len);
ptr::write(end, value);
self.len += 1;
}
}
这里如果T是自引用类型,如何保证在ptr::write之后在end有一个有效的对象?
【问题讨论】:
-
T怎么能自我引用呢?据我所知,只有Pinned 对象可以有自引用,但固定对象总是在指针后面,不能移动。如果U类型是自引用的,那么您只能通过Pin<U>指针(不是自引用)进行访问。
标签: rust self-reference