21 c++ programming-languages language-design c++11
在实际的C++标准中,创建满足以下规则的集合即使不是不可能也很难:
为了满足(1),集合不能存储原始指针.为了满足(2),集合必须存储原始指针.为了满足(3),集合必须按值存储对象.
结论:这三个项目相互冲突.
当使用shared_ptr
s 时,将不满足Item(2),因为当一个集合需要移动一个元素时,它需要进行两次调用:构造函数和析构函数.不可能进行大规模memcpy()
的复制/移动操作.
我是否正确所描述的问题将通过unique_ptr
和解决std::move()
?使用这些工具的馆藏将能够满足所有3个条件:
unique_ptr
析构函数.没有内存泄漏.unique_ptr
不需要任何额外的空间用于参考计数器; 因此它的身体应该与包裹的指针完全相同unique_ptrs
通过使用memmove()
类似操作(?)来移动组,std::move()
操作员也可以在unique_ptr
不进行构造函数/析构函数对调用的情况下移动每个对象.unique_ptr
将拥有给定记忆的独家所有权.不会发生意外的内存泄漏.这是真的?使用的其他优点是unique_ptr
什么?