smart pointer
スマートポインタ(Smart Pointer)とは、単純なメモリアドレスの保持に加えて、リソース管理を自動化する機能を持つ
ポインタのことです。
普通のポインタ(
raw pointer)は、単にメモリアドレスを格納するだけで、メモリの割り当てや解放を手動で行う必要があります。
一方、スマートポインタは参照カウントやスコープ管理を行い、適切なタイミングでリソースを開放することで、メモリリークやダングリングポインタのリスクを低減します。
普通のポインタとの違い
table特性 | 普通のポインタ (`int* ptr`) | スマートポインタ (`std::shared_ptr<int> ptr`) |
メモリの所有権 | 手動管理 | スマートポインタが管理 |
メモリ解放の責任 | `delete` を手動で呼ぶ | スコープを抜けると自動解放 |
参照カウント | なし | あり (`shared_ptr`) |
コピー時の動作 | 単純にアドレスをコピー | 参照カウントを増減 |
安全性 | 手動管理のためエラー発生しやすい | 自動管理で安全性が向上 |
C++のスマートポインタ
Rustのスマートポインタ
Rust では、スマートポインタの概念が C++ とは少し異なり、所有権システムに密接に関係しています。
C++とRustのスマートポインタの違い
table言語 | スマートポインタ | 目的 | C++との比較 |
C++ | `std::unique_ptr` | 単独所有 | `Box<T>` に類似 |
C++ | `std::shared_ptr` | 参照カウント管理 | `Rc<T>` に類似 |
C++ | `std::weak_ptr` | 循環参照防止 | `Weak<T>` に類似 |
Rust | `Box<T>` | ヒープ確保 | `unique_ptr` に近い |
Rust | `Rc<T>` | 参照カウント管理(スレッド不可) | `shared_ptr` に近い |
Rust | `Arc<T>` | スレッドセーフな参照カウント | `shared_ptr` に近いがスレッドセーフ |
Rust | `RefCell<T>` | 実行時可変性チェック | C++の`mutable shared_ptr` に近い |