小编upr*_*ser的帖子

将'动态分配的对象'推送到向量是否安全?

每当我需要将动态分配的对象添加到向量中时,我一直在做以下方式:

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)

但问题是新的方式冗长乏味,我看到没有人这样做.(至少不在我身边......)

我应该采用新的方式吗?
或者,我可以坚持旧的方式吗?
或者,有更好的方法吗?

c++ vector exception-safe

6
推荐指数
2
解决办法
6008
查看次数

标签 统计

c++ ×1

exception-safe ×1

vector ×1