目次→
演算子→
メモリ演算子→
Operator Delete←オリジナル・サイト
演算子 New 式 で割り当てられたデータを破棄し、メモリを解放する演算子
用法:
Delete buf
又は
Delete[] buf
パラメータ:
記述:
Delete Statement 演算子は、
New Expression の演算子で作成されたオブジェクトのメモリを破棄し、解放するために使われます。
TYPE を削除するとき、そのデストラクタが呼び出されます。
Delete Statement 演算子は、
New Expression 演算子から返されたアドレスでのみ、使用してください。
Delete Statement 演算子の配列バージョン
Delete[] Statement 演算子は、
New[] Expression 演算子(
New Expression 演算子の配列バージョン)で作成されたオブジェクトの配列を破棄するために使われます。
デストラクタも、ここで呼ばれます。
Delete Statement 演算子は、
New Expression 演算子から返されたアドレスと共に使用し、
Delete[] Statement 演算子は、
New[] Expression 演算子(
New Expression 演算子の配列バージョン)から返されたアドレスと共に使用する必要があります。
異なるバージョンの演算子を混在させることはできません。
メモリが削除された後、
buf ポインタは無効なメモリを指しています。
同じポインタ値に対して
Delete Expression を2回呼び出すと、未定義の動作が発生します。
null ポインタの間接参照は、見つけて、デバッグすることが簡単なので、以降で誤ったコードの使い方から保護するために、
buf ポインタを null (
0) に設定することを推奨します。
NULL ポインタに対して
Delete Statement 演算子を呼び出しても、何も起こりません。
Delete Statement 演算子によって提供されるメモリー割り当て解除プロセス部分は、メンバー演算子
Delete Overload としてユーザー定義型に対して多重定義できます。
データ破壊のための前の処理部分は、決して修正できません。
注意:
演算子
Delete[](演算子か多重定義)、または、唯一の多重定義演算子
Delete は、サブ型多型と互換性がありません。たとえ、クラッシュを引き起こす可能性のある
Override Virtual Destructor を使ってもダメです。
派生型ポインタに対して、このような演算子
Delete([]) Statement を呼び出さなくても、最も安全な方法は、(基本型ポインタに対して)上書きされたユーザー
Virtual メンバ手続きを呼び出すことです。
これは派生型レベルで、自動的に演算子
Delete([]) Statement を起動します。
例:
Type Rational
As Integer numerator, denominator
End Type
' Rationalを作成して初期化し、そのアドレスを保存します。
Dim p As Rational Ptr = New Rational(3, 4)
Print p->numerator & "/" & p->denominator
' rational を破壊し、そのメモリをシステムに戻します。
Delete p
' 将来のアクセスを防ぐために、ポインタを null に設定します。
p = 0
' 100 整数分のメモリを割り当て、最初の分のアドレスを格納します。
Dim p As Integer Ptr = New Integer[100]
' 配列内の整数にいくつかの値を割り当てます。
For i As Integer = 0 To 99
p[i] = i
Next
' 整数配列全体を解放します。
Delete[] p
' 将来のアクセスを防ぐために、ポインタを null に設定します。
p = 0
方言差:
QBからの違い:
参照: