C++ のnew演算子

id:d:monamour555さんからコメントで

monamour555monamour555 2010/03/29 23:29
C++目的なら,operator new をオーバーロードしたほうが手っ取り早くないですか.

と、提案を受けました。調べてみるとnew演算子を多重定義する方法がいくつかネットでも解説されており、確かにこれならうまくいきそうです。しかし、まだ不安があったのでnew演算子についてもう少し掘り下げてみました。
不安というのは、「多重定義が動作する保証はどのように与えられているのか」ということです。C++で関数を多重定義する場合は既に定義されているものと関数の引数リストが違うものでなければなりません。ところが、ざっと調べたところその点に関する解説はありません。結局の所、C++言語標準化を行っている委員会のWG21のページにある、ISO/IEC 14882: Programming Language C++ Current Draftをつまみ読みして解決しました。Draftですが参照しても問題ないと思われます。
それによるとライブラリ関数であるnewは「デフォルト」のものでしかなく、ユーザーが独自のnew関数を定義すると、それに取って代わられることになります。なるほどと、思いました。リンカのweakなリンクってこのためにあったのですね。newのほかdeleteも同じです。ということで、どうやらnewとdeleteを書き換えれば当座のC++化には用が足りそうです。