newを場所に応じて使い分けることってできんのだろうか?
なんとかnewを、場所に応じて使い分けることができんものかと、試行錯誤をしてみたのですが、どうにもうまくいかない。
#include <iostream> namespace WKPN1{ void* operator new(size_t size) throw() { using namespace std; cout << "wkpn1" << size << endl; return malloc(size); } } namespace WKPN2{ void* operator new(size_t size) throw() { using namespace std; std::cout << "wkpn2" << size << endl; return malloc(size); } } class Hoge{ public: Hoge(){ using namespace std; std::cout << "hoge constructor" << endl; } ~Hoge(){ } }; int main(){ { using namespace WKPN1; new Hoge(); } { using namespace WKPN2; new Hoge(); } }
とやってみたもののg++では
32行目と36行目で、call of overloaded 'operator new(unsigned int)' is ambiguous
っと文句言われてしまう。
どうやら、デフォルトのnewなのか、こっちの用意したnewなのか区別がつかないらしい。
また、コンパイラによっては、そもそもoperator newをネームスペースの中に入れられなかったりするようだ。びっくり。
なんか、方法はありそうな気がするんだけれども…。うむむ…。