簡體   English   中英

當我使用引用而不是擁有的值調用 std::mem::drop 時會發生什么?

[英]What happens when I call std::mem::drop with a reference instead of an owned value?

fn main() {
    let k = "fire";

    drop(k);

    println!("{:?}", k);
}

操場

為什么我刪除后仍然可以使用k drop不會自動取消引用嗎? 如果是,那為什么? &strDrop實現是什么樣的?

當我使用引用調用std::mem::drop時會發生什么

引用本身被刪除。

引用而不是擁有的值

引用一個值。

為什么我刪除后仍然可以使用k

因為不可變指針實現了Copy 您傳入引用的副本,然后將其刪除。

drop不會自動取消引用嗎?

不,不是的。

&strDrop實現是什么樣的?

沒有任何類型的參考,不可變或可變的,所以它實際上是1

impl Drop for &str {
    fn drop(&mut self) {}
}

也可以看看:


1 — 正如Peter Hall 所指出的,擁有空Drop實現和沒有用戶提供的Drop實現之間存在差異,但就問題而言,它們是相同的。

暫無
暫無

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

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