rust が提供するポインタは、以下の3つがあるらしい。
- reference
- Box
- Rc/Arc
また、基本的なルールとして、リーダブル(immutable)なポインタは同時に複数作れて、ライタブル(mutable)なポインタは一度に一つしか作れない。 これをownershipとかいうらしい。 複数の人がかけたら、値が不定になるからそれを防ぐためのようだ。
3つのポインタはC++な人には、以下の対応付けで考えればわかりやすい。
rust | c++ |
---|---|
reference | reference |
Box | std::unique_ptr |
Rc/Arc | std::shared_ptr |
Rc と Arc の違いは、thread と組み合わせられるかどうか。 atomically reference counted の略らしい。 C++ の shared_ptr は thread 対応なのでカウンタのロックが必要でパフォーマンスが云々みたいな話があるが、 rust は用途別に用意したようだ。