C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!
C++では、実行時に必要なだけメモリを確保して使うことができます。
このとき使うのが new
/ delete
演算子です。
動的メモリ管理の基本として、必ず覚えておくべき機能です。
この記事では、new
/ delete
の使い方、配列との違い、注意点などを初心者向けにわかりやすく解説します。
new演算子とは?
new
は、ヒープ領域にメモリを確保し、確保したアドレス(ポインタ)を返す演算子です。
書式は以下のとおりです。
int* ptr = new int; // 整数1つ分のメモリを確保
*ptr = 100;
cout << *ptr << endl; // → 100
このように new 型名
でメモリを確保し、そのアドレスをポインタに保存します。
delete演算子とは?
delete
は new
で確保したメモリを解放する演算子です。
ヒープメモリは自動的に解放されないため、必ず 手動で delete
を使います。
delete ptr; // メモリを解放
この解放を忘れると、メモリリークの原因になります。
配列に対するnew/delete
配列を確保する場合は、[]
を使い、解放時も delete[]
を使う必要があります。
int* arr = new int[5]; // int型の配列を5個分確保
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
}
delete[] arr; // 配列用のdeleteを忘れずに!
delete
と delete[]
を正しく使い分けましょう。
クラスのnew/delete
クラスも new
で生成し、delete
で解放できます。
このとき、コンストラクタとデストラクタが自動で呼ばれます。
class Person {
public:
Person() { cout << "生成" << endl; }
~Person() { cout << "破棄" << endl; }
};
int main() {
Person* p = new Person();
delete p;
}
new/deleteを使うメリット
- 実行時に必要なメモリだけ使える
- 大きさが決まらない配列や構造体も扱える
- クラスの動的生成・管理ができる
注意点
delete
を忘れるとメモリリークが発生します
- 配列には必ず
delete[]
を使う必要があります
delete
後のポインタは nullptr にしておくと安全
まとめ
C++の new
/ delete
は、動的メモリを扱うための基本中の基本です。
特にdelete
の使い忘れはバグの原因になるので、確保と解放はセットで覚えましょう。
現代のC++ではスマートポインタ(unique_ptr
, shared_ptr
)の使用が推奨されますが、まずは new
/delete
の基本をしっかりマスターすることが大切です。