C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう
C++では、実行時に必要なメモリを自分で確保・解放することができます。
これを動的メモリ確保(Dynamic Memory Allocation)と呼びます。
この記事では、動的メモリ確保の基本的な使い方から、配列の確保、new
/delete
の使い方、注意点まで初心者向けにわかりやすく解説します。
動的メモリ確保とは?
動的メモリ確保とは、プログラムの実行中に必要なサイズだけメモリを確保することです。
静的な配列ではサイズをあらかじめ決める必要がありますが、動的確保なら柔軟に対応できます。
new演算子でメモリ確保
C++では new
を使ってヒープ領域にメモリを確保し、そのアドレスをポインタで受け取ります。
int* p = new int; // 整数1つ分のメモリを確保
*p = 100;
cout << *p << endl; // → 100
この場合、p
は確保されたメモリのアドレスを指します。
delete演算子でメモリ解放
確保したメモリは使い終わったら delete
を使って手動で解放する必要があります。
delete p; // メモリを解放
解放しないとメモリリーク(無駄にメモリを消費し続ける状態)になります。
動的配列の確保
複数の要素を扱うには、new
と配列を組み合わせて使います。
int* arr = new int[5]; // int型の配列を5個分確保
for (int i = 0; i < 5; i++) {
arr[i] = i * 10;
}
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
delete[] arr; // 配列の場合は delete[] を使う
動的メモリのメリット
- 必要な分だけ確保できる
メモリの無駄遣いを減らせる。
- 実行時にサイズを決められる
ユーザー入力などに対応可能。
- 構造体やオブジェクトにも利用可能
柔軟な設計が可能になる。
注意点
- 必ず delete を忘れずに!(メモリリーク防止)
delete[]
と delete
の使い分けに注意
- 解放後のポインタを使うと未定義動作になる(ダングリングポインタ)
nullptr
への安全対策も忘れずに
スマートポインタとの関係(参考)
C++11以降では、手動の new/delete
の代わりに スマートポインタ(unique_ptr
や shared_ptr
) を使うことが推奨されています。
これにより、自動でメモリ管理ができ、安全性が大幅に向上します。
まとめ
C++の動的メモリ確保は、必要なメモリを自由に操作するための基本技術です。
new
とdelete
を正しく使いこなせば、柔軟で効率的なプログラムが書けるようになります。
まずは基本の動的変数・動的配列から使ってみて、慣れてきたら構造体やクラスにも応用してみましょう!