reserveで例外かわせても、次のnewによるメモリ確保で例外になる可能性はなくならないのだから、
newを一旦別の変数で受けるしかないでしょ

hoge h;

h = new hoge;
vec.push_back(h);

が正解。