3

を再定義する目的は何なのか、私はいつも疑問に思っていましたnew。これは、開発者が次を使用する場合を意味します。

#pragma push(macro,new)
#undef new

これはどのような目的に役立ちますか? new 演算子はすべてのコンパイラの標準だと思いましたか? new を再定義すると、開発者は new がオブジェクトにスペースを割り当てる方法を変更できますか?

4

1 に答える 1

4

C++ プログラムで発生するすべての割り当てをログに記録することは、離れていると考えることができます。したがって、この割り当てを記録する独自の新しい操作を定義する必要があります。また、C++ で行われた割り当て解除をすべてログに記録するには、削除を再定義する必要があります。

一部のツールはそれを再定義し、メモリ ブロックの開始と終了にさらに多くのメモリを割り当て、ヘッドとテールの特定のシグネチャを取り出して、コードのバッファ オーバーランの問題を見つけます。そうするMS Application Verifierを確認できます。

于 2012-08-31T01:48:07.010 に答える