关于c ++:指针和容器

Pointers and containers

我们都知道原始指针需要包装在某种形式的智能指针中,以获得异常安全的内存管理。但当涉及到指针容器时,问题就变得更加棘手了。

std容器坚持所包含的对象是可复制的,因此这排除了std::auto-ptr的使用,尽管您仍然可以使用boost::shared-ptr等。

但也有一些增压容器专门设计用于安全地保存指针:请参阅指针容器库

问题是:在什么条件下,我更喜欢在智能容器指针容器上使用PTRIB容器?

1
2
3
4
5
boost::ptr_vector<X>

or

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

Boost指针容器对它们所拥有的资源拥有严格的所有权。std::vector>具有共享所有权。可能有必要这样做的原因,但如果没有,我将默认为boost::ptr_vector。YMMV。


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


嗯,开销是一种情况。

一个共享指针的向量会做很多额外的复制,包括创建一个新的智能指针,增加一个引用,缩小一个引用,等等。所有这些都可以通过指针容器来避免。

需要分析以确保容器操作是瓶颈,但是:)