C++でスマートポインタを実装する方法は何ですか?
C++では、std::shared_ptrとstd::unique_ptrを使用してスマートポインタを実現することができます。これらのスマートポインタクラスはどちらもヘッダーファイルで定義されています。
- std::shared_ptrを使うと、std::shared_ptrは、オブジェクトを複数の場所で共有できる参照カウントスマートポインタです。最後のstd::shared_ptrがスコープを超えると、オブジェクトは自動的に破棄されます。
- サンプルコード:
- #includeint main() {
std::shared_ptr ptr(new int(5));
*ptr = 10;
std::cout << *ptr << std::endl;
return 0;
} - std::unique_ptrを使用すると、そのオブジェクトへのポインタは1つだけ保有することができ、std::unique_ptrがスコープを外れると、オブジェクトは自動的に破棄されます。
- サンプルコード:
- #includeint main() {
std::unique_ptr ptr(new int(5));
*ptr = 10;
std::cout << *ptr << std::endl;
return 0;
}
これらのスマートポインタクラスは自動的にメモリ管理を行い、リソースを手動で解放する必要がないため、メモリリークなどの問題を効果的に回避することができます。