みなさんはbad_alloc例外ってどう扱ってますか?

最近VC6.0から7.1に移行してとまどってる厨房です。
いままでは、

char* buf = new char [256];
if (buf) {
 delete [ ] buf;
}

みたいにしてたのを、
(auto_ptr, shared_ptrを使わないとすると)

try {
 char* buf = new char [256];
 delete [ ] buf;
}
catch (bad_alloc&) {
 delete [ ] buf; ← 例外の場合も開放しなきゃだめ?
}

にすればいいんでしょうか。

nothrowを指定するっていう方法もあるけど、
なんかDEBUG_NEWがあるとコンパイルエラーになるし...