STLのデバッグメモリアロケータ

//独自アロケータ
template<typename T>
class myallocator { ... };

//独自アロケータを使ったvector
typedef std::vector< int, myallocator<int> > myvector;

これで独自アロケータでメモリ確保するvectorが作れます。

が、しかし、

std::strstreamなどの奥底で使われているに普通のnew/deleteやstd::stringが使われているのはなぜ!?
細かいところではあるけどメモリ確保がデフォルトに渡ってしまう。new/deleteはオーバーライドできるのでセーフですが、普通にfree(ptr)を呼んでるとこがあってそこがオーバーライドできない。
しかも_DEBUGだけでデバッグ処理をif/defしてるので手の打ちようがありません。はがゆい。。。