ホームページ  >  記事  >  バックエンド開発  >  C でグローバルな `new` および `delete` 演算子をオーバーライドするにはどうすればよいですか?

C でグローバルな `new` および `delete` 演算子をオーバーライドするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-30 03:12:03848ブラウズ

How Can I Override the Global `new` and `delete` Operators in C  ?

グローバル演算子のオーバーライド: new 演算子と delete 演算子の置き換え

複雑なコードベースでは、カスタムの new 演算子と delete 演算子を一貫して使用することが困難な場合があります。問題の 1 つは、外部ライブラリと STL の使用によりカスタム メモリ管理がバイパスされる可能性があることです。

複数のファイルにオーバーロードを含める代わりに、グローバルな置換を実現できます。これらの演算子を定義する別の変換単位 (TU) をリンクします。この TU は次の機能を提供します。

<code class="cpp">void * operator new(std::size_t n) throw(std::bad_alloc);
void operator delete(void * p) throw();</code>

を含む標準ライブラリ名を解決するには、または同様のヘッダーが必要になる場合があります。 C 11 以降では、decltype(sizeof(0)) で std::size_t を置き換えることができ、動的例外指定を省略できます。

<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false);</code>

この TU をリンクすると、カスタムの new 演算子と delete 演算子が全体にわたってアクティブになります。このプログラムにより、一貫した使用と診断機能の向上が保証されます。

以上がC でグローバルな `new` および `delete` 演算子をオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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