每当我需要将动态分配的对象添加到向量中时,我一直在做以下方式:
class Foo { ... };
vector<Foo*> v;
v.push_back(new Foo);
// do stuff with Foo in v
// delete all Foo in v
Run Code Online (Sandbox Code Playgroud)
它只是工作,许多其他人似乎做同样的事情.
今天,我学会了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
Run Code Online (Sandbox Code Playgroud)
但问题是新的方式冗长乏味,我看到没有人这样做.(至少不在我身边......)
我应该采用新的方式吗?
或者,我可以坚持旧的方式吗?
或者,有更好的方法吗?