![](/img/trans.png)
[英]Initializing boost::shared_ptr<std::vector<T>> with boost::shared_ptr<std::list<T>>
[英]boost::ptr_container and std::vector<shared_ptr>
阅读timdays回答 这个问题后,我很好奇boost::ptr_container
和std::vector<shared_ptr>
之间的区别。 我的印象是boost::ptr_container
对赋予它的指针拥有所有权 ,并且在释放时会调用它包含的所有指针的析构函数,而不管其居民的其他引用。 这与std::vector<shared_ptr>
的目的相反,它在释放之后只会在ref计数为0时自行释放指针?
如果是这种情况(我认为不是这样),为什么甚至Boost文档示例都会比较两者 ,就好像它们的目的相似,为什么timday的答案提出了一个boost::ptr_container
当它与它非常不同时std::vector<shared_ptr>
。
你是对的,两者差别很大。
正如您所注意到的,第一个区别是所有权语义。 不共享指针容器中项目的所有权。 在这方面, 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容器中。 人们大多数时候都不了解指针容器......
在某些情况下,两者都可以应用:比如说一堆函数充当容器的客户端,指出多态对象并对它们进行操作。 如果容器超过所有函数,则可以用指针容器替换它。
Timday通过指出列表中的遗漏回答了“下面的一组指针[s]之间有什么区别”的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.