このページで学ぶこと
- モダンC++(C++11以降)の安全性と生産性
- レガシーC++との決別
- ゼロ・オーバーヘッド(Zero Overhead)の原則
コンパイル
ソースコードを機械語に変換する処理。実行前にエラーを検出できる。
ポインタ
メモリ上のアドレスを指す変数。C++では「スマートポインタ」で安全に扱う。
RAII
リソース取得と初期化を一体化し、スコープを抜けたら自動解放する設計パターン。
STL
Standard Template Library。vector, map, algorithmなど便利な部品群。
メタファー:錆びた手斧と電動ツール
C++の真価:Zero Overhead Principle
書き換えマップ:Legacy vs Modern
C++は進化の早い言語です。インターネット上の古い記事(C++98/03)を参考にすると、かえって遠回りになります。
| 古い書き方 (Legacy) | 現代の書き方 (Modern) | 理由 |
|---|---|---|
raw pointer (*) | smart pointer | 自動でメモリ解放(GCいらず) |
#define | constexpr / inline | 型安全、デバッグ可能 |
NULL | nullptr | 明確なポインタ型として扱える |
typedef | using | テンプレートに対応、読みやすい |
C-array ([]) | std::vector / std::array | 境界チェック、便利なメソッド |
for (int i...) | range-based for | インデックス管理ミス撲滅 |
アンチパターン:C言語のノリで書かない
C++は「C with Classes(クラス付きのC)」ではありません。全く別の言語だと思ってください。
Bad (Legacy C-Style)
// void* や printf は型安全ではないvoid* ptr = malloc(sizeof(int) * 10);printf("Value: %d", *(int*)ptr);free(ptr); // 忘れるとメモリリークGood (Modern C++)
// vector と iostream を使うstd::vector<int> vec(10);std::cout << "Value: " << vec[0] << std::endl;// 自動でメモリ解放される