簡體   English   中英

Vec::push 如何為自引用類型工作?

[英]How does Vec::push work for self referencing types?

引用自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之后有一個有效的 object end

Rust中,所有類型都是可移動的,移動后必須有效; ptr::write本質上只是將值移動到新位置。

自引用對象只能通過隱藏在Pin后面以避免被移動來工作,這是因為Pin需要間接訪問並避免提供對“不可移動”值的&mut T的訪問。 但是引腳本身仍然是可移動的,因此將一個引腳傳遞給.push()不是問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM