每当我需要动态分配的对象添加到载体中我一直在做下列方式:将vector_back'动态分配的对象'push到vector是否安全?
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
但问题是,新的方法是冗长,乏味的,我看没有人这样做(至少不在我身边......)
。我应该去的新途径?
或者说,我能不能用老办法坚持?
或者,有没有这样做的更好的办法?
另请参阅:为什么是错误的使用std :: auto_ptr的<>与STL容器?] [1] [1]:http://stackoverflow.com/questions/111478/why-is -it-wrong-to-use-stdauto-ptr-with-stl-containers – 2010-11-15 14:52:11
@Martin:实际上在这里使用'auto_ptr'和'vector'没有问题(我的意思是,特定于它们的交互),因为它不是我们正在谈论的'vector>“。 –
2010-11-15 15:01:34
@Maththieu:你说得对。然后我再次避免*说*有问题,虽然我的链接可能暗示它:-) – 2010-11-15 15:44:41