我有这个问题是因为我正在阅读auto_ptr
的部分。它说auto_ptr
不能保存在矢量中,因为它具有破坏性的拷贝和赋值。我能以某种方式理解它,我能想到的一个例子是像auto_ptr ap = vec[0]
这样的东西会让我大吃一惊。但如果我谨慎地使用它而不这样做,我能把auto_ptr
存储在向量中吗?我不能储存还有什么更深层次的原因吗?也许向量的实现内部需要这样的假设,即元素需要是可复制可构造的?
谢谢。
当调整向量的大小时,它的元素会复制到一个新的支持数组中,这就是使用复制构造函数的地方。如果您有一个足够新的编译器,请考虑使用std::unique_ptr。
因为向量必须将已构建的对象存储在其存储器中。因此,它必须将对象复制到自己的存储器中。
同样是矢量,以确保scope-safety
,它必须复制/移动传递的对象。
参见push_back 文档
std::vector::push_back
void push_back( const T& value ); (1)
void push_back( T&& value ); (2) (since C++11)
将给定的元素值追加到容器的末尾。
1) 新元素被初始化为值的副本。
2) 值移动到新元素中。
参数
value-要附加的元素的值
类型要求
T必须满足
CopyInsertable
的要求才能使用过载T必须满足
MoveInsertable
的要求才能使用过载
并且CopyInsertable
id定义为
指定可以在未初始化的存储中就地复制构造该类型的实例。