Cpp Delete演算子 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(delete演算子)
 
1行: 1行:
 +
[[C PlusPlus#C++からの技術|C++]]に戻る
 +
 +
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++ delete演算子</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp) delete演算子</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
8行: 11行:
 
<br />
 
<br />
 
== '''delete演算子''' ==
 
== '''delete演算子''' ==
 +
 
delete演算子は[[Cpp New演算子|new演算子]]によって確保されたメモリを解放するための命令になります。deleteの後ろにメモリを開放したいnew演算子によってメモリを確保しているポインタ変数を指定します。配列のメモリ解放時はdelete[]のように記述して、後ろに動的配列ポインタ変数を記述します。
 
delete演算子は[[Cpp New演算子|new演算子]]によって確保されたメモリを解放するための命令になります。deleteの後ろにメモリを開放したいnew演算子によってメモリを確保しているポインタ変数を指定します。配列のメモリ解放時はdelete[]のように記述して、後ろに動的配列ポインタ変数を記述します。
  
20行: 24行:
 
例2
 
例2
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
   int nLength =strlen(pcStrOrigin)
+
   int nLength = strlen(pcStrOrigin)
 
   char *pcMessage;
 
   char *pcMessage;
 
   pcMessage = new char[nLength];
 
   pcMessage = new char[nLength];
26行: 30行:
 
   delete[] pcMessage;
 
   delete[] pcMessage;
 
</syntaxhighlight>
 
</syntaxhighlight>
このように配列のメモリを解放できますが、配列終端が未使用あるいは\0あるいは0である必要があります。全部を使ってしまうと終端がわからず、メモリ解放処理が失敗します。
+
 
 +
上記のように配列を解放するときは[]が必要です。
 +
 
 +
多次元配列を解放する場合は動的に生成したすべての要素を順序立てて解放する必要があります。
 +
 
 +
例3
 +
<syntaxhighlight lang="cpp">
 +
  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;
 +
</syntaxhighlight>
 +
 
 +
 
 +
delete演算子は、演算子ですから、演算子のオーバロードをすることができます。以下のような関数に独自の機能を追加していけばよいです。<syntaxhighlight lang="cpp">
 +
void* operator new(size_t sizeNew) {
 +
  return malloc(sizeNew);
 +
}
 +
void operator delete(void* pDelete) {
 +
    free(pDelete);
 +
}
 +
</syntaxhighlight>
 +
 
 +
 
 +
[[C PlusPlus#C++からの技術|C++]]に戻る

2021年2月6日 (土) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス