はじめに
この実験では、RustにおけるDrop
トレイトの使用方法を調べます。このトレイトは、オブジェクトがスコープ外になると自動的に呼び出され、オブジェクトが所有するリソースを解放するために使用されます。
注: 実験でファイル名が指定されていない場合、好きなファイル名を使用できます。たとえば、
main.rs
を使用して、rustc main.rs &&./main
でコンパイルして実行できます。
This tutorial is from open-source community. Access the source code
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、RustにおけるDrop
トレイトの使用方法を調べます。このトレイトは、オブジェクトがスコープ外になると自動的に呼び出され、オブジェクトが所有するリソースを解放するために使用されます。
注: 実験でファイル名が指定されていない場合、好きなファイル名を使用できます。たとえば、
main.rs
を使用して、rustc main.rs &&./main
でコンパイルして実行できます。
Drop
トレイトには1つのメソッドしかありません。それはdrop
で、オブジェクトがスコープ外になると自動的に呼び出されます。Drop
トレイトの主な用途は、実装クラスが所有するリソースを解放することです。
Box
、Vec
、String
、File
、およびProcess
は、リソースを解放するためにDrop
トレイトを実装する型のいくつかの例です。Drop
トレイトは、任意のカスタムデータ型に対しても手動で実装することができます。
次の例では、drop
関数にコンソールへの出力を追加して、それが呼び出されたときに通知します。
struct Droppable {
name: &'static str,
}
// `drop`のこの単純な実装は、コンソールへの出力を追加します。
impl Drop for Droppable {
fn drop(&mut self) {
println!("> Dropping {}", self.name);
}
}
fn main() {
let _a = Droppable { name: "a" };
// ブロックA
{
let _b = Droppable { name: "b" };
// ブロックB
{
let _c = Droppable { name: "c" };
let _d = Droppable { name: "d" };
println!("Exiting block B");
}
println!("Just exited block B");
println!("Exiting block A");
}
println!("Just exited block A");
// 変数は`drop`関数を使用して手動で破棄できます
drop(_a);
// TODO ^ Try commenting this line
println!("end of the main function");
// `_a`はここでは再度`drop`されません。既に(手動で)`drop`されているためです
}
おめでとうございます!あなたはDrop実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を行って練習してください。