Cpp Delete演算子 新しいページはコチラ
提供: yonewiki
(ページの作成:「<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-tex...」) |
|||
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[]のように記述して、後ろに動的配列ポインタ変数を記述します。 | ||
例1 | 例1 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | int *pnReturnValue; | ||
+ | pnReturnValue = new int; | ||
+ | … | ||
+ | delete pnReturnValue; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 例2 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | int nLength = strlen(pcStrOrigin) | ||
+ | char *pcMessage; | ||
+ | pcMessage = new char[nLength]; | ||
+ | … | ||
+ | delete[] pcMessage; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 上記のように配列を解放するときは[]が必要です。 | ||
+ | |||
+ | 多次元配列を解放する場合は動的に生成したすべての要素を順序立てて解放する必要があります。 | ||
+ | |||
+ | 例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++]]に戻る |