スマートポインタは、C++でメモリ管理を自動化するための便利な機能です。
通常のポインタでは、new
でメモリを確保した後、使い終わったら手動でdelete
で解放する必要がありますが、スマートポインタを使うと、自動的にメモリの解放が行われるため、メモリリーク(解放忘れ)を防ぐことができます。
C++には、主に以下の3つのスマートポインタがあります:
std::unique_ptr
:
unique_ptr
に所有権を渡すことはできますが、複製はできません。#include <memory>
int main() {
// スマートポインタを使ってメモリを自動管理
std::unique_ptr<int> p = std::make_unique<int>(10); // int型のメモリを確保し、10を代入
// pがスコープを抜けた時、自動的にメモリが解放される
return 0;
}
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;
}
std::weak_ptr
:
shared_ptr
の弱い参照です。shared_ptr
がメモリを解放するのを防ぎません。循環参照を防ぐために使います。スマートポインタを使うことで、C++でも手動でdelete
を使う必要がなくなり、メモリ管理が楽になります。また、他の高レベル言語(JavaやC#)のように、自動的にガベージコレクションでメモリを解放する仕組みに近い形で使えます。