2011-12-05 12 views
3

ダイナミックメモリ割り当て演算子newとdeleteは、特定のクラスに対してオーバーライドできます。ウィンドウ上のC++ランタイムによって提供されるデフォルトとは異なるメモリ割り当て方式を定義することができます。特定のクラスのnew演算子とdelete演算子をオーバーライドする理由は何ですか?

  1. 特定のクラスのポータルを新しいものに置き換えて、それがunixでも動作するようにしましたか?それはC++標準の一部ですか?

  2. 特定のクラスのメモリ割り当て演算子をオーバーライドする必要がある場合はありますか?私が考えることができるケースは、リークのメモリ割り当てを追跡することだけです。

+0

Windowsの機能であることを前提にして、標準に移植可能かどうかを尋ねられましたか?後ろ向きのように見える! –

+1

の可能な複製[なぜ新しいものと削除するデフォルトの演算子を置き換えるのですか?](http://stackoverflow.com/questions/7149461/why-should-one-replace-default-new-and-delete-operators) –

+0

@Tomalak - 私は何もしなかった。どのような声明があなたに混乱を引き起こしていますか?私はそれを再訪することができます。 –

答えて

1

はい、それは移植可能ですが、MSのコンパイラは、ANSI標準とは異なる、それの「nothrow」の部分を扱うことに注意してください - その上で焼かれてしまいました。

なぜ、はいトラックメモリ、トラッキングリーク、トラッキング割り当てはすべて素晴らしいですが、それらはグローバルに実行できます。あなたはVRAM割り当てのようなものに対して新しい/削除を上書きすることができますが、私は通常、そのような種類のものが別の機能で呼び出されているのを見ています。新しい/削除をオーバーライドする最も大きな理由は、メモリシステムの使用方法をよりよく理解していて、仕入先から提供された新しい/削除の素晴らしいバージョンよりも効率的に機能を調整できる場合です。小規模なオブジェクトの割り当ては、デバッグ目的で割り当てを渡したい情報の量だけでなく、よく見過ごされるか、実装が不適切なものとして気になります。

0

アドレスを珍しい方法で整列させたい場合。たとえば、ある時間前に私は8にアドレスを割り当て、他の目的には最後の3ビットを使用します。

事前初期化されたメモリに新しいクラスインスタンスを配置する場合。たとえば、空のノードのリストから新しいノードをリストに追加する場合です。

関連する問題