問題一覧に戻る
中級スマートポインタ
問題80: スマートポインタ - Box

Box'<'T'>'は値をスタックではなくヒープに配置するスマートポインタです。無限サイズになる再帰的な型に必須です。Boxはヒープデータの所有権を提供し、スコープを抜けると自動的に解放します。他のスマートポインタと違い、実行時オーバーヘッドがゼロで、大きなデータやコンパイル時にサイズが必要な場合に便利です。

// 再帰的な型定義
enum List {
Cons(i32, <>),
Nil,
}

use List::{Cons, Nil};

fn main() {
// ヒープへの配置
let b = ::(5);
println!("b = {}", b);

// 再帰的リスト
let list = Cons(1,
Box::new(Cons(2,
Box::new(Cons(3,
Box::new()))));

// Boxのデリファレンス
let x = 5;
let y = Box::new(x);
assert_eq!(5, );
}