Unity_Lesson

スマートポインタは、C++でメモリ管理を自動化するための便利な機能です。

通常のポインタでは、newでメモリを確保した後、使い終わったら手動でdeleteで解放する必要がありますが、スマートポインタを使うと、自動的にメモリの解放が行われるため、メモリリーク(解放忘れ)を防ぐことができます。

C++には、主に以下の3つのスマートポインタがあります:

  1. std::unique_ptr:
    • メモリの所有権を一つのスマートポインタにだけ持たせ、他の場所で共有しない場合に使います。
    • 他のunique_ptrに所有権を渡すことはできますが、複製はできません。
    #include <memory>
    int main() {
        // スマートポインタを使ってメモリを自動管理
        std::unique_ptr<int> p = std::make_unique<int>(10); // int型のメモリを確保し、10を代入
        // pがスコープを抜けた時、自動的にメモリが解放される
        return 0;
    }
    
  2. std::shared_ptr:
    • 複数の場所で同じメモリを共有したい場合に使います。複数のshared_ptrが同じメモリを指すことができ、最後の1つが破棄されるときにメモリが解放されます。
    #include <memory>
    int main() {
        // shared_ptrでメモリを共有
        std::shared_ptr<int> p1 = std::make_shared<int>(10);
        std::shared_ptr<int> p2 = p1; // p1とp2は同じメモリを指す
        // p1, p2が破棄された時、自動的にメモリが解放される
        return 0;
    }
    
  3. std::weak_ptr:
    • shared_ptrの弱い参照です。shared_ptrがメモリを解放するのを防ぎません。循環参照を防ぐために使います。

スマートポインタを使うことで、C++でも手動でdeleteを使う必要がなくなり、メモリ管理が楽になります。また、他の高レベル言語(JavaやC#)のように、自動的にガベージコレクションでメモリを解放する仕組みに近い形で使えます。