gpt4 book ai didi

c++ - boost::ptr_container 和 std::vector

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:12 25 4
gpt4 key购买 nike

看完timdays answerthis 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> 的目的非常不同时.

最佳答案

你是对的,两者有很大的不同。

如您所见,第一个区别是所有权语义。指针容器中项目的所有权是不共享的。在这方面,boost::ptr_vector<T>更接近 std::vector<std::unique_ptr<T>> .

但这不是唯一的区别!

  • 除非在类型中明确说明,否则指针容器将不包含任何空指针
  • 指针容器具有深层复制语义(使用 new_clone 方法),并且只有在持有的对象可复制时才能复制
  • 指针容器具有深层的 const 语义,也就是说,如果容器是 const那么一个人不能改变它的元素之一。

至于为什么@timday不得不提到 Boost Pointer Container,我认为这是因为他想稍微扩大这个问题。 Boost 指针容器非常类似于可以容纳多个对象的智能指针,并提供比一般指针容器更好的语法。

关于他与 std::vector< boost::shared_ptr<T> > 的比较我认为这仅仅是因为这是在没有移动语义的情况下实现指针 vector 的传统方法(没有 unique_ptr )自 auto_ptr 以来不能在 STL 容器中使用。大多数时候人们只是不知道指针容器...

关于c++ - boost::ptr_container 和 std::vector<shared_ptr>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com