use std::fmt::{self, Display};
struct S;
impl Display for S {
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
formatter.write_str("1")
}
}
impl Drop for S {
fn drop(&mut self) {
print!("2");
}
}
fn f() -> S {
S
}
fn main() {
let S = f();
print!("{}", S);
}
drop
當一個值失去全部引用的時候,生命就走到了終點,會呼叫drop
。
經常出現的有三種情況- 頂替:對一個變數重複賦值,老的值失去引用
move
:所有權進行轉移,新生- 結束:脫離作用域
能夠想到的是,結果必然以為12
進行結尾。
主要分析一下let S = f()
。
fn f() -> S { S }
方法內部宣告瞭一個S
,作為返回值,這裡發生了move
。
因此會呼叫一次drop
,因此會列印1
。
212
本作品採用《CC 協議》,轉載必須註明作者和本文連結