delete演算子

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

new演算子がヒープ領域からメモリを割り当てるのに対し、delete演算子はメモリをヒープ領域に解放します。

スポンサーリンク

通常のオブジェクトの場合

delete ポインタ;
ポインタ = NULL;

newで配列を割り当てた場合

delete [] ポインタ;
ポインタ = NULL;

と、delete演算子を使います。
通常のオブジェクトへのポインタと、オブジェクトの配列へのポインタで、deleteの際には、[]を使用して区別する必要があります。

deleteの動作を実験で確認してみます。

#include <iostream>
 
int main() {
    // 整数の場合
    int *one_ptr;
    one_ptr = new int;
 
    *one_ptr = 100;
    std::cout << *one_ptr << "\n";
    std::cout << one_ptr << "\n";
 
    // 通常のオブジェクトへのポインタをdelete
    delete one_ptr;
    one_ptr = NULL;
    // 確認
    std::cout << one_ptr << "\n\n";
 
    // 整数型の配列の場合
    int *data_ptr;
    data_ptr = new int[5];
    std::cout << data_ptr << "\n";
 
    delete [] data_ptr;
    data_ptr = NULL;
    std::cout << data_ptr << "\n";
 
    return 0;
}

実行結果。

100
00426C28
00000000
 
00426CD0
00000000

ポインタをdeleteしたあとに、メモリが解放されて「00000000」となっているのを確認できます。

メモリを解放し忘れた場合は、バッファは使用されないが、メモリ管理システムからはまだ使用しているように見える状態となる。
これを、メモリリークと呼びます。
解放されたメモリを使用してしまうのも、プログラムがクラッシュする原因となる。

スポンサーリンク
 
スポンサーリンク