在阅读timdays answer至this question之后,我对boost::ptr_container
和std::vector<shared_ptr>
之间的区别感到好奇。我的印象是a boost::ptr_container
had ownership over the pointers given to it,并且在释放时会调用其包含的所有指针的析构函数,而不管其居民的其他引用。这与std::vector<shared_ptr>
的目的相反,在释放之后,如果引用计数为0,它们只会释放指针?
如果是这种情况(我假设不是这样),为什么甚至Boost文档示例compare the two就好像它们的目的相似,为什么timday的答案提出boost::ptr_container
时它与std::vector<shared_ptr>
的目的截然不同。
答案 0 :(得分:9)
你是对的,两者差别很大。
正如您所注意到的,第一个区别是所有权语义。不共享指针容器中项目的所有权。在这方面,boost::ptr_vector<T>
更接近std::vector<std::unique_ptr<T>>
。
但这不是唯一的区别!
new_clone
方法),只有在所持对象可复制的情况下才能复制const
,那么就不能改变其中一个元素。至于为什么@timday
被迫提到Boost Pointer Container,我认为这是因为他想在某种程度上扩大这个问题。 Boost Pointer Container非常像Smart Pointers,它可以容纳多个对象,并提供一个更好的语法,通常指针容器。
关于他与std::vector< boost::shared_ptr<T> >
的比较,我认为这只是因为这是在没有移动语义的情况下实现指针向量的传统方法(无unique_ptr
),因为auto_ptr
不能在STL容器中使用。人们大多数时候都不知道Pointer Containers ......
答案 1 :(得分:1)
在某些情况下可以应用两者:比如说一堆函数充当容器的客户端,指出多态对象并对它们进行操作。如果容器超过所有函数,则可以用指针容器替换它。
Timday通过指出列表中的遗漏来回答“下面的一组指针[s]之间有什么区别”。