次のコード スニペットを想像してください。
void* my_alloc(size_t size) { return new char[size]; } void my_free(void* ptr) { delete[] ptr; }
void ポインター ptr を削除しても安全ですか?この中でマナー?
答え:
C 標準によれば、これは危険な行為です。セクション 5.3.5/3 は次のようになります:
「最初の選択肢 (オブジェクトの削除) では、オペランドの静的型がその動的型と異なる場合、静的型はオペランドの基本クラスになります。オペランドの動的タイプと静的タイプには仮想デストラクターが必要です。2 番目の選択肢 (配列の削除) では、削除されるオブジェクトの動的タイプがその静的タイプと異なる場合、動作は未定義です。動作は未定義です。"
この箇所に続く脚注は、次のようにさらに強調しています。
"これは、void 型のオブジェクトが存在しないため、 void* 型のポインタを使用してオブジェクトを削除できないことを意味します。 ."
したがって、void ポインターを使用した削除は、予期しない動作を引き起こす可能性があるため、厳しく禁止されています。
以上がC で Void ポインターを削除するのは安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。