C++のnew/delete演算子を完全解説!初心者でもわかるメモリ管理の仕組み
生徒
「C++でnewとかdeleteって出てきたんですが、正直なにをしているのか分かりません…」
先生
「C++では、プログラムが使う場所を自分で確保したり、片付けたりできます。そのときに使うのがnew演算子とdelete演算子です。」
生徒
「場所って、パソコンの中のどこかですか?」
先生
「そうですね。では、パソコンを触ったことがない人でも分かるように、たとえ話から説明していきましょう。」
1. C++のnew/delete演算子を理解する前に知っておきたいこと
C++のnew演算子とdelete演算子を理解するには、まずメモリという考え方を知る必要があります。メモリとは、パソコンの中にある作業用の机のようなものです。プログラムは、この机の上に数字や文字を書きながら動いています。
変数を作るというのは、「机の上に紙を一枚置いて、そこに名前を付ける」イメージです。C++では、普通に変数を書くと、自動的に机の一部が使われます。しかし、必要な大きさや使うタイミングを自分で決めたい場合があります。そのときに登場するのがnewとdeleteです。
2. new演算子とは?場所を借りるための命令
new演算子は、「パソコンのメモリに新しい場所を用意してください」とお願いする命令です。現実世界でたとえるなら、倉庫に電話をして「段ボール箱を一つ貸してください」と頼むようなものです。
このときC++は、必要な大きさの場所を探し、その場所の住所を教えてくれます。この住所のことをポインタと呼びます。ポインタとは、「場所を示すための番号」だと考えてください。
#include <iostream>
int main() {
int* p = new int;
*p = 10;
std::cout << *p << std::endl;
return 0;
}
10
この例では、new演算子で整数を置く場所を借りています。pには場所の住所が入り、*pを使ってその場所の中身にアクセスしています。
3. delete演算子とは?借りた場所を返す命令
delete演算子は、newで借りたメモリを返すための命令です。倉庫から借りた段ボール箱は、使い終わったら返しますよね。それと同じで、使い終わったメモリはdeleteで解放します。
もし返さずに放置すると、机の上がどんどん散らかっていきます。これをメモリリークと呼びます。初心者のうちはピンと来なくても、「片付けを忘れると困る」という感覚で覚えておくと十分です。
#include <iostream>
int main() {
int* p = new int;
*p = 20;
std::cout << *p << std::endl;
delete p;
return 0;
}
20
このように、newとdeleteは必ずセットで使うのが基本です。
4. 配列を扱うnew[]とdelete[]の仕組み
C++では、数字を一つだけでなく、たくさんまとめて使いたいこともあります。その場合は、配列用のnew演算子を使います。これは「ロッカーをまとめて借りる」イメージです。
#include <iostream>
int main() {
int* numbers = new int[3];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
for (int i = 0; i < 3; i++) {
std::cout << numbers[i] << std::endl;
}
delete[] numbers;
return 0;
}
1
2
3
配列の場合は、必ずdelete[]を使います。これを間違えると、正しく片付けができません。
5. new/delete演算子と自動変数の違い
普段よく使う変数は、プログラムの中で自動的に作られ、自動的に消えます。これを自動変数と呼びます。一方、newで作ったメモリは、deleteを書くまで残り続けます。
これは「授業が終わると片付く机」と「自分で借りた倉庫」の違いのようなものです。new/delete演算子を使うと、自由度は上がりますが、その分、管理する責任も増えます。
6. new/delete演算子を使う場面と注意点
C++のnew/delete演算子は、大きなデータを扱うときや、使うタイミングが決まっていないデータを扱うときに使われます。ただし、初心者のうちは「メモリを借りたら必ず返す」というルールを守ることが何より重要です。
また、deleteした後のポインタを使うと、予期しない動作が起きます。使い終わった箱をもう一度使おうとするようなものなので、とても危険です。
7. C++演算子まとめとしてのnew/deleteの位置づけ
new演算子とdelete演算子は、C++の中でも特に重要な演算子です。計算をするためではなく、メモリ管理という役割を持っています。
プログラミング未経験者にとっては難しく感じやすい部分ですが、「場所を借りる」「使い終わったら返す」という流れをイメージできれば、new/delete演算子の仕組みはしっかり理解できます。C++の演算子まとめの中でも、基礎として押さえておきたいポイントです。