Rust言語におけるポインタの使い方は何ですか?
Rust言語では、ポインタの使用方法には以下の種類があります。
- Rustにおける通常のポインタは、&記号を使って作成します。参照はデータの所有権を借りることを許可しますが、データの変更は許可されません。可変参照と不変参照の2種類があります。
- xという変数に5を格納して、yにxへの不変な参照を格納します。同様に、zという可変な変数に10を格納し、wにzへの可変な参照を格納します。
- 裸のポインタ(Raw Pointer):Rustにおける裸のポインタは、安全性チェックの影響を受けないポインタであり、通常、低レベルの操作に使用されます。*const Tと*mut Tを使用して、不変と可変の裸のポインタを宣言できます。
- xを5とする;
let raw_ptr: *const i32 = &x; // 不変な生ポインタ
yを10とする;
let mut_raw_ptr: *mut i32 = &mut y; // 可変な生ポインタ - 裸のポインタを使用する際は、unsafeキーワードでコードブロックを囲む必要があります。これにより、そのコードブロック内の操作がRustの安全性チェックから除外されることを示します。
- Boxポインター:Box型を使用することで、ヒープ上にメモリを割り当て、破棄されると自動的に解放されます。
- x = Box::new(5); とする。
- Boxポインタは、所有権の移転が必要な場合に、動的に割り当てられたデータ構造を作成するために通常使用されます。
さらに、Rustでは、nullとconstバージョンの生ポインタ(std::ptr::nullとstd::ptr::null_mut)や、ネイティブなオペレーティングシステムハンドルを操作するためのstd::os::raw::c_void型のポインタなど、他の種類のポインタも提供されています。