每当我需要将动态分配的对象添加到向量中时,我一直在这样做:
class Foo { ... };
vector<Foo*> v;
v.push_back(new Foo);
// do stuff with Foo in v
// delete all Foo in v
它刚刚奏效,许多其他人似乎也在做同样的事情。
今天学习了vector::push_back可以抛出异常。这意味着上面的代码不是异常安全的。:-( 所以我想出了一个解决方案:
class Foo { ... };
vector<Foo*> v;
auto_ptr<Foo> p(new Foo);
v.push_back(p.get());
p.release();
// do stuff with Foo in v
// delete all Foo in v
但问题是新方法冗长乏味,而且我看到没有人这样做。(至少不在我身边……)
我应该走新路吗?
或者,我可以坚持旧的方式吗?
或者,有没有更好的方法呢?