ホームページ >バックエンド開発 >C++ >C で Void ポインターを削除するのは安全ですか?

C で Void ポインターを削除するのは安全ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-16 21:19:15889ブラウズ

Is Deleting a Void Pointer in C   Safe?

Void ポインター削除の落とし穴

次のコード スニペットを想像してください。

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。