Cpp Delete演算子

提供:yonewiki
2022年9月26日 (月) 11:02時点におけるYo-net (トーク | 投稿記録)による版 (ページの作成:「C++に戻る <table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner"> <tr> <td style="width:1px;"></td> <td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) delete演算子</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</t…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

C++に戻る


本来の表記は「C++(Cpp) delete演算子」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。

※このページではC++にのみ存在する機能として、記事タイトルがC++ delete演算子になっています。

delete演算子

delete演算子はnew演算子によって確保されたメモリを解放するための命令になります。deleteの後ろにメモリを開放したいnew演算子によってメモリを確保しているポインタ変数を指定します。配列のメモリ解放時はdelete[]のように記述して、後ろに動的配列ポインタ変数を記述します。

例1

  int *pnReturnValue;
  pnReturnValue = new int;
  
  delete pnReturnValue;

例2

  int nLength = strlen(pcStrOrigin)
  char *pcMessage;
  pcMessage = new char[nLength];
  
  delete[] pcMessage;

上記のように配列を解放するときは[]が必要です。

多次元配列を解放する場合は動的に生成したすべての要素を順序立てて解放する必要があります。

例3

  char ***pppcStrChart = new char**[10];
  for(int i = 0;i < 10;i++){
    pppcStrChart[i] = new char*[2];
    for(int j = 0;j < 2;j++){
      pppcStrChart[i][j] = new char[256];      
    }
  }
  
  for(int i = 0;i < 10;i++){
    for(int j = 0;j < 2;j++){
      delete[] pppcStrChart[i][j];      
    }
    delete[] pppcStrChart[i];      
  }
  delete[] pppcStrChart;


delete演算子は、演算子ですから、演算子のオーバロードをすることができます。以下のような関数に独自の機能を追加していけばよいです。

void* operator new(size_t sizeNew) {
  return malloc(sizeNew);
}
void operator delete(void* pDelete) {
    free(pDelete);
}


C++に戻る