コンテンツにスキップ

new/delete

new

ヒープにメモリを動的に確保する場合は new 演算子を利用します。

int* p1 = new int(100);  // p1 は new で確保されたメモリ領域を指すポインタ
int* p2 = new int[5];    // 配列の場合は [] を付ける

delete

ヒープに動的に確保したメモリを解放する場合は delete 演算子を利用します。

int* p1 = new int(100);
int* p2 = new int[5];

delete p1;    // new によって確保されたメモリを delete で解放
delete[] p2;  // 配列の場合は [] を付ける

new を利用して確保したメモリの解放を忘れるとメモリリークになります。 newdelete は必ずセットで使いましょう。

メモリリーク

void Function() {
    int* p = new int[100000];

    // delete せずに Function() が終了すると…
}   // int[100000] 分のメモリが解放されないままになる。

malloc/free

malloc/free を利用することでもメモリの確保・解放は可能ですが、C++ での利用は推奨されていません。