指针和容器

时间:2008-09-22 16:44:11

标签: c++ stl containers smart-pointers

我们都知道RAW指针需要包含在某种形式的智能指针中以获得Exception安全内存管理。但是当涉及指针容器时,问题变得更加棘手。

std容器坚持包含的对象是可复制的,所以这排除了使用std :: auto_ptr,尽管你仍然可以使用boost :: shared_ptr等。

但是也有一些明确设计的增强容器可以安全地保存指针:
Pointer Container Library

问题是: 我应该在什么条件下使用ptr_containers而不是smart_pointers容器?

boost::ptr_vector<X>

or

std::vector<boost::shared_ptr<X> >

3 个答案:

答案 0 :(得分:13)

Boost指针容器对其拥有的资源拥有严格的所有权。 std :: vector&lt; boost :: shared_ptr&lt; X&gt;&gt;拥有共享权。有理由说明为什么这可能是必要的,但如果不是,我会默认使用boost :: ptr_vector&lt; X&gt;。 YMMV。

答案 1 :(得分:3)

稳定:智能指针是处理资源管理的一种非常好的方法,但不是唯一的方法。我同意你会在编写良好的C ++代码中看到很少的原始指针,但根据我的经验,你也没有看到很多智能指针。使用原始指针容器实现了许多完全异常安全的类。

答案 2 :(得分:2)

嗯,开销是一个案例。

共享指针的向量将执行大量无关的复制,包括在调整大小上创建新的智能指针,递增引用,递减引用等。使用指针容器可以避免所有这些。

需要进行性能分析以确保容器操作是瓶颈但是:)