後始末が必要なものはクラスで包んでおけば、どこで例外が起きるとか気にする必要ないんだけどね。

struct A {};
struct B : A
{
std::auto_ptr<int> a, b, c;
B() : a(new int(1)), b(new int(2)), c(new int(3)) {}
};

B* p = new B;

例えばnew int(3)で例外が投げられても、構築済みのメンバa, bと基本クラスAのデストラクタが呼ばれ
Bの為に確保されたメモリも解放される。