指针和容器

时间:2020-03-06 14:33:01  来源:igfitidea点击:

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

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

但是,还有一些专门设计用来安全保存指针的boost容器:
请参阅指针容器库

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

boost::ptr_vector<X>

or

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

解决方案

好吧,开销是一种情况。

共享指针向量将进行大量无关的复制,其中包括创建新的智能指针,增加引用,减少引用等。使用指针容器可以避免所有这些情况。

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

Boost指针容器对其所拥有的资源具有严格的所有权。 std :: vector <boost :: shared_ptr <X >>具有共享所有权。有某些原因可能需要这样做,但是如果没有必要,我会默认使用boost :: ptr_vector <X>。 YMMV。

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