第12章 std::unique_ptr によるメモリ管理
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、ヒープ上のオブジェクトを効果的に扱い、使用後にメモリが解放されるようにする方法について説明する。
第9章でcharポインタを、第11章でstd::stringの詳細を学んだ。
std::stringはcharポインタよりも高い抽象化レベルを提供し、作業を容易にする。
std::vectorと同様に、std::stringは自動的にサイズ変更を行い、スコープ外に出ると片付けを行うため、自分で処理する必要はない。
C++はオブジェクトの使用終了時にクリーンアップを支援する他の機能も提供する。
ヒープ上にで割り当てられたオブジェクトをクリーンアップしたい場合、スマートポインタを使うことで低レベルな手動メモリ管理を避けられる。スマートポインタとは、ポインタのように動作するが自動でクリーンアップを行う型だ。
スマートポインタにはいくつかの種類があるが、まずは最も使いやすいものから始めよう。
そうすれば第13章でスマートポインタを使って取引ゲームを拡張できるようになる。
では、なぜヒープを使いたいと思うのか?
これまで、std::stringやstd::vectorがバックグラウンドでヒープを使っていたとしても、直接自分でこれを行う必要はなかった。
第13章では、ヒープオブジェクトの重要なユースケースを示す:クラス型に応じて振る舞いを変えられることだ。
もう一つのユースケースは、サイズが変わるオブジェクトのためだ。
整数のように固定サイズのオブジェクトも多い。
一方、std :: vectorとstd::stringはどちらも要素数を可変にできる。コンパイル時に必要なサイズが分からない場合、ヒープを使って動的に割り当てるのだ。
この章では、動的メモリへのポインタを安全に扱うスマートな方法を説明する。 コンストラクタについてさらに学び、コンパイル時にコードをテストする新しい方法を見る。 また参照の復習も行い、この章の終わりまでに次の章で改良版トレーディングゲームを書く準備が整う。 第10章から、構成要素を使ってクラスを作成・移動・コピーする方法を学んできたが、この章ではクラスを使って振る舞いを変化させる準備を整える。
std::unique_ptrの作成
<MEMORY>ヘッダは様々なスマートポインタと、それらを作成する関数を提供する。
このセクションではstd::unique_ptrの使用方法を示し、その後「スマートポインタの詳細」で他のスマートポインタのタイプの概要を簡単に示す。
スマートポインタはメモリ管理を代行するため、生のポインタより扱いやすい。
ヒープメモリを取得したら、使用後は解放すべきだ。そうしないと、プログラムがメモリを保持し続け、システムがメモリ不足に陥る可能性がある。
スマートポインタは他のリソースの管理にも使える。
std::unique_ptrはstd::make_unique と密接に関連している。
std::make_unique関数はnewを呼び出し、スマートポインタのデストラクタはデフォルトで削除を呼び出す。
(これらの関数については「std::string の仕組み」で触れた。)
スマートポインタを使えば、これらの関数を直接扱う必要はない。
新しいmain.cppファイルを作成する。
メモリヘッダとStockヘッダをインクルードする: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access