delete 演算子は
、オブジェクトに関連付けられたメモリーを割り振り解除することによって、new を使用
して作成されたオブジェクトを破棄します。
delete 演算子には、void 戻り型があります。この演算子の構文は、次のとおりです。
>>-+----+--delete--object_pointer------------------------------>< '-::-'
delete のオペランドは、new によって戻されるポインター でなければなりません。定数を指すポインターであっては なりません。ヌル・ポインターを削除しても影響はありません。
delete[] 演算子は、new[] 演算子を使用して作成さ れた 配列オブジェクトに割り振られたストレージを解放します。delete 演算子は、new を使用して 作成され た個々のオブジェクトに割り振られたストレージを解放します。
この演算子の構文は、次のとおりです。
>>-+----+--delete--[--]--array--------------------------------->< '-::-'
delete によって配列オブジェクトを削除した結果は、未定義です。 delete[] によって個々のオブジェクトを 削除する場合も同じです。配列の次元は、delete[] で指定する必要はありません。
削除されたオブジェクトまたは配列へアクセスしようとする試みの結果は、未定義です。
デストラクターがクラスに定義されている場合は、delete によって そのデストラクターが呼び出されます。デストラクターがあるかどうかに関係なく、delete は、 クラスの関数 operator delete() がある場合は、この関数呼び出しによって 指し示されたストレージを解放します。
次の場合には、グローバル ::operator delete() が使用されます。
次の場合には、グローバル ::operator delete[]() が使用されます。
デフォルトのグローバル operator delete() だけが、デフォルトのグローバル operator new() によって割り振られたストレージを解放することができます。デフォルトのグローバル operator delete[]() のみが、デフォルトのグローバル operator new[]() によって 配列に割り振られたストレージを解放することができます。
関連参照