delete
null ポインターを ing することは何もしないことを知っています。
いずれの場合も、delete のオペランドの値がヌル ポインターの場合、操作は無効になります。
(C++ 標準5.3.5 [expr.delete] p2
)
またvoid*
、 type のオブジェクトがないため、デストラクタを呼び出すことができないため、ポインタの削除は未定義の動作ですvoid
。
最初の選択肢 (
delete object
) では、delete のオペランドの値は、非配列オブジェクトへのポインター、またはそのようなオブジェクトの基本クラスを表すサブオブジェクトへのポインターでなければなりません。そうでない場合、動作は未定義です。
(C++ 標準5.3.5 [expr.delete] p2
)
さて、通常は最初にリストされたものは後でリストされたものよりも優先されると思いますvoid*
が、次のようなヌルポインターはどうですか?
void* p = 0;
delete p; // UB or well-defined?