作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在实际的 C++ 标准中,创建满足以下规则的集合即使不是不可能也很难:
为了满足 (1),集合不能存储原始指针。为了满足 (2),集合必须存储原始指针。为了满足 (3),集合必须按值存储对象。
结论:三项相互冲突。
使用 shared_ptr
时将不满足第 (2) 项,因为当集合需要移动元素时,它需要进行两次调用:构造函数和析构函数。不可能进行大规模的 memcpy()
类复制/移动操作。
上述问题将由 unique_ptr
和 std::move()
解决,我是否正确?使用这些工具的集合将能够满足所有 3 个条件:
unique_ptr
的析构函数。没有内存泄漏。unique_ptr
不需要任何额外的空间用于引用计数器;因此它的主体应该与包装指针的大小完全相同,memmove()
之类的操作来移动 unique_ptrs
组 (?) ,std::move()
运算符也允许移动每个 unique_ptr
对象,而无需调用构造函数/析构函数对。unique_ptr
将拥有给定内存的独占所有权。不会发生意外的内存泄漏。这是真的吗?使用 unique_ptr
的其他优点是什么?
最佳答案
我完全同意。终于有了一种处理堆分配对象的自然方式。
回答:
I am not sure, but it looks like this allows to move groups of
unique_ptr
s by usingmemmove()
like operations,
有一个 proposal允许这样做,但它还没有进入 C++11 标准。
关于c++ - unique_ptr - 重大改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956611/
不久前,我不小心将一个项目文件转换为 Visual Studio 2010(当然,没有源代码控制)。虽然没有重新创建项目文件(这将只需要大约 10 或 15 分钟),而是查看了典型的 2008 项目文
我是一名优秀的程序员,十分优秀!