stl container with std::unique_ptr#39;s vs boost::ptr_container(带有 std::unique_ptr 的 stl 容器 vs boost::ptr_container)
问题描述
有了 c++11,我在问自己是否可以替代 c++11 中的 boost::ptr_containers.我知道我可以使用例如一个 std::vector
,但我不确定这是否是一个完整的替代品.处理这些情况的推荐方式是什么?
With c++11 out there, I was asking myself if there is a replacement of the boost::ptr_containers in c++11. I know I can use e.g. a std::vector<std::unique_ptr<T> >
, but I'm not sure if this is a complete replacement. What is the recommended way of handling these cases?
推荐答案
他们确实解决了两个相似但不同的问题.
They really solve two similar but different problems.
指针容器是一种将对象存储在容器中的方法,这些对象恰好是指向已分配内存而不是值的指针.他们尽其所能隐藏一个事实,即他们是一个指针容器.这意味着:
A pointer container is a way to store objects in a container that just so happen to be pointers to allocated memory rather than values. They do everything in their power to hide the fact that they are a container of pointers. This means:
- 容器中的条目不能为 NULL.
- 您从迭代器和函数中获得的值是对类型的引用,而不是类型的指针.
- 使用许多标准算法可能......很棘手.而棘手",我的意思是破碎.指针容器有自己的内置算法.
然而,事实上,指针容器知道它们是指针的容器,它们可以提供一些新的功能:
However, the fact that pointer containers know that they're containers of pointers, they can offer some new functionality:
- 一个
clone
成员函数,它通过在对象类型上使用某个可克隆"概念来执行深度复制. - 容器释放其对象所有权的能力(例如,在浅拷贝之后).
- 内置函数可将所有权转让给其他容器.
- A
clone
member function that performs a deep copy, via the use of a certain "Cloneable" concept on the type of the object. - The ability of a container to release ownership of its objects (after a shallow copy, for example).
- Built-in functions to transfer ownership to other containers.
它们确实是完全不同的概念.有很多事情你必须手动完成,而指针容器可以使用专门的函数自动完成.
They really are quite different concepts. There is a lot of stuff you would have to do manually that pointer containers can do automatically with specialized functions.
如果你真的需要一个指针的容器,那么你可以使用unique_ptr
的容器.但是,如果您需要存储一堆碰巧在堆上分配的对象,并且您想与它们玩涉及所有权等的特殊游戏,那么指针容器不是一个坏主意.
If you really need a container of pointers, then you can use containers of unique_ptr
. But if you need to store a bunch of objects that you happen to heap allocate, and you want to play special games with them involving ownership and such, then the pointer containers are not a bad idea.
这篇关于带有 std::unique_ptr 的 stl 容器 vs boost::ptr_container的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:带有 std::unique_ptr 的 stl 容器 vs boost::ptr_container
基础教程推荐
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01