【发布时间】:2010-11-15 14:37:46
【问题描述】:
每当我需要将动态分配的对象添加到向量中时,我都会这样做:
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]: stackoverflow.com/questions/111478/…
-
@Martin:实际上在这里使用
auto_ptr和vector没有问题(我的意思是,特定于他们的交互),因为我们正在谈论的不是vector<auto_ptr<T>>关于。 -
@Matthieu:你是对的。然后我再次避免说存在问题,尽管我的链接可能确实暗示了它:-)
标签: c++ vector exception-safe