delete
読み:デリート
外語:delete

 C++の予約語の一つ。演算子の一つ。
目次

概要
 削除をするときに使う。
 確保されたメモリーの解放などに使う。

特徴

C++
 newによってヒープに確保されたメモリーを解放する。
 この時、確保されていたのがクラスのインスタンスであればデストラクターが呼ばれる。
 C++では、new/delete演算子を用いてメモリー等の確保と開放が可能。このためCの頃とは違い、malloc/free関数を用いる場面は殆どない。
 なお、一度deleteして解放した領域を再度deleteした場合の動作は未定義である。さらに、deleteしても領域が解放されるだけで、ポインターがNULLになるわけではない。
 Cで複数回free()した場合と同様、C++も複数回のdeleteで二重解放の脆弱性が生じる。

Java
 Javaの場合、newで領域確保をする。しかし、領域解放はガベージコレクションで行なわれるため、deleteに相当するものがない。
 Javaでは、CやC++にある二重解放の脆弱性を生じさせないようにするため、オブジェクトの削除はガベージコレクションに限定されている。

C++11
 C++11では、メンバー関数の定義で、規定の動作を禁止することを宣言するのに使う。
 class Example {
 // ...
 Example& operator=(const Example &) = delete;
 Example(const Example &) = delete;
 };
 代入演算子やコピーコンストラクターを「削除」することができ、これによって安全なclassにすることができる。
 逆に規定動作を規定動作として明示するする場合はdefaultを使う。

再検索