我注意到 std::vector 对其 elememt 类型 T 的要求从 C++03 更改为 C++0x。T 现在不再需要是可复制构造的,但移动可构造性就足够了。
即使我们没有潜在的重新分配,T 是否也需要它?
vector<boost::scoped_ptr<int>> x(numberElements);
我认为这里没有必要搬家。规范是怎么说的?
根据 23.3.6.2 [vector.cons] 第 4 段,您使用的构造函数需要DefaultInsertable
. 由于构造函数不是需求表的构造函数之一,CopyInsertable
因此也不应该有任何额外的要求。根据 23.2.1 [container.requirements.general] 第 13 段,DefaultInsertable
意味着以下表达式是格式良好的:
allocator_traits<A>::construct(m, p);
看来,这意味着答案取决于使用的分配器A
。我不太想分析 20.6.7.2 [allocator.uses.construction] 的深层含义。让我们让讲师逃脱:确定这一段的含义留作练习!