delete演算子
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
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」となっているのを確認できます。
メモリを解放し忘れた場合は、バッファは使用されないが、メモリ管理システムからはまだ使用しているように見える状態となる。
これを、メモリリークと呼びます。
解放されたメモリを使用してしまうのも、プログラムがクラッシュする原因となる。
スポンサーリンク
>> 次の記事 : リンクリスト
<< 前の記事 : new演算子でオブジェクト生成
- - 関連記事 -
- ツリー
- 二重リンクリスト
- リンクリストの指定した箇所に要素を追加
- リンクリスト
- new演算子でオブジェクト生成
- new演算子・動的メモリの割り当て
- 構造体とポインタ
- 配列のポインタ宣言
- 配列とポインタ・アドレスのインクリメントを確認
- 定数ポインタ
- ポインタとは
スポンサーリンク