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を使う。
再検索