PR:この記事にはアフィリエイトリンクが含まれます。
C++のメモリ管理ではnewとdeleteの書き方に加え、資源を誰が所有し、いつ解放するかを考えます。型とスコープにその責任を持たせるRAIIが基本です。
スマートポインターの名前を覚えただけでは、コピーやムーブ、例外が絡む場面の判断は難しくなります。C++本を読むなら、基礎を追う本と設計の判断軸を学ぶ本を分けると知識を整理しやすくなります。
今回は、動的確保、所有権のルール、演習、性能、C++23という視点で5冊を紹介します。扱う規格やメモリ管理の内容は、それぞれ異なります。
本の早見表
| 書名 | 規格・主な内容 | 読者の目安 |
|---|---|---|
江添亮のC++入門 | C++20を意識。基礎から動的確保、ムーブ、スマートポインターへ | C++の仕組みを順に学びたい人 |
Effective Modern C++ | C++11およびC++14、42項目の指針、スマートポインター | 経験者が設計を見直すとき |
Modern C++チャレンジ | C++17、100問と解法 | 幅広い題材でコードを書きたい人 |
Optimized C++ | C++11およびC++14、所有権や確保・コピーの性能 | 実行速度との関係を知りたい人 |
Professional C++, 6th Edition | C++23、独立したメモリ管理章 | 英語で実務知識を深めたい人 |
RAIIの基礎をじっくり扱う本もあれば、経験者向けに実践的な判断基準を示す本もあります。演習や性能の視点が加わると、知識を設計に結びつけやすくなりますね。
参考価格(税込)は江添亮のC++入門が5,500円、Effective Modern C++が4,180円です。Modern C++チャレンジは3,740円、Optimized C++は4,400円で、実売価格は時期や販売店によって変わります。
RAIIの仕組み
RAIIは資源の取得とオブジェクトの寿命をそろえる考え方で、コンストラクターで確保した資源はスコープ終了時にデストラクターが解放します。
手動でdeleteを書くことが主題ではありません。例外が起きたり途中でreturnしたりしても、オブジェクトの破棄に解放を結びつけておけば、経路ごとに後片付けを書く必要がなくなります。
たとえばstd::vector<int>は、要素を格納する領域を自分で管理し、寿命が終わると解放します。生の配列を確保する方法と比べ、要素数の変更や解放を型に任せられるわけです。
RAIIはロックやファイルなど、メモリー以外の資源にも適用できます。std::lock_guardでミューテックスをロックすれば、スコープの終了時に解除されます。資源の寿命を扱う共通の仕組みです。
所有権の整理
ポインターが指す対象と、その対象を所有することは別の話です。誰が最後に解放するのかをコードで示せば、関数の戻り値やクラスのメンバーの寿命も追いやすくなります。生ポインターは借用を表す場面で使うと、意図が伝わりやすいでしょう。
std::unique_ptrは対象を一つの場所で所有する型です。コピーはできず、ムーブによって所有権を移せます。共有が不要な関数から所有者を返す場合も、単独所有の意図が型に表れます。
複数の場所で対象の寿命を共同管理するときは、std::shared_ptrを使います。ただし、参照カウントの管理が加わります。相互参照が循環すると解放されないこともあるため、共有所有が本当に必要か考えたいところです。
std::weak_ptrは所有権を増やさず、共有対象を参照する型です。循環参照を避けるときにも使えます。また、メンバーにvectorやunique_ptrなどのRAII型を使えば、自前のデストラクターを避けるRule of Zeroにもつながります。
江添亮の入門
『江添亮のC++入門』はKADOKAWA刊で704ページ、2019年9月20日発行です。C++20を意識した内容で、刊行時の現行規格に準拠しています。実行やデバッグ、文法も扱います。
動的メモリー確保、vectorの実装とメモリー確保、ムーブ、スマートポインターを順に扱います。RAIIを単独で覚えるより、コンテナーや言語機能との関係から仕組みを理解したい人に合います。
税込5,500円が参考価格です。プログラミング経験者を主な対象とする厚い本なので、C++の基礎とメモリ管理をまとめて補強したい人におすすめです。所有権のルールだけを短時間で確認したい人には、読む範囲が広めでしょう。
Effective C++
『Effective Modern C++』はオライリー・ジャパン刊の368ページの日本語版で、2015年発行です。対象規格はC++11およびC++14。42項目の指針を通じ、機能の使いどころを実践的に学べます。
専用章ではunique_ptr、shared_ptr、weak_ptrに加え、make_uniqueとmake_sharedを扱い、それぞれの所有権やファクトリ関数の役割を判断ルールに沿って確認できます。
税込4,180円が参考価格。C++を読み書きできる人がスマートポインターや所有権の考え方を見直すのに適しています。対象規格はC++11およびC++14なので、C++20やC++23固有の機能を調べる本とは役割が異なります。
C++17チャレンジ
『Modern C++チャレンジ』はオライリー・ジャパン刊、336ページ。C++17対応の100問と解法を収録しています。数学や文字列、ファイル操作、並行処理、暗号、ネットワークまで題材は幅広いです。
課題はメモリ管理に限らず、さまざまなコードに触れられます。スマートポインターやコンテナーの知識を別のプログラムで試したい人におすすめです。
税込3,740円が参考価格です。幅広いレベルのC++プログラマーが対象で、これから学ぶ人も取り組めます。問題と解法を行き来し、自分の手で確かめられるのが演習形式のよさですね。
Optimized C++
『Optimized C++』はオライリー・ジャパン刊、368ページ。2017年発行の日本語版で、C++11およびC++14を扱います。高速なC++プログラムを必要とする人に向け、サンプルコードとともに最適化を解説します。
メモリ管理では動的変数の所有権、スマートポインター、確保やコピーの削減を扱います。make_sharedにも触れ、資源の管理が実行速度やメモリー確保の回数とどう関わるかを追えます。
税込4,400円が参考価格です。RAIIに加えてコピーや確保のコストまで把握したい実務者に合います。速さを考えるうえでも、まず所有権と寿命を整理する視点が欠かせません。
C++23の実務書
『Professional C++, 6th Edition』はMarc Gregoire著、2024年1月12日発行の英語版です。第6版ではC++23の機能をほぼ網羅しており、C++の知識を深めたい実務者向けです。
第7章のMemory Managementは221〜257ページにわたり、メモリ管理を独立して扱います。WindowsとLinuxでテストされたコード付きケーススタディもあり、幅広いC++23の内容と合わせて学べます。
英語で技術書を読む中上級者におすすめです。C++11およびC++14以降の知識をC++23まで広げたい人が、専門的な内容をまとまった範囲で読み込めます。
結論
一冊だけ購入するなら、まず『江添亮のC++入門』を勧めます。動的確保、vector、ムーブ、スマートポインターまでをC++全体の流れで学べるため、メモリ管理の基本を身につけやすいからです。
すでにC++を使う人が所有権の指針を見直すなら『Effective Modern C++』、性能との関係を知るなら『Optimized C++』。演習を重ねるなら『Modern C++チャレンジ』、英語でC++23の実務知識を掘り下げるなら『Professional C++, 6th Edition』がおすすめです。
C++のメモリ管理で中心になるのは、資源の所有者と寿命の設計です。本で仕組みを理解したら、自分のクラスやAPIに当てはめ、所有権を型で表せる箇所から改善していきましょう。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。






