6

我注意到 std::vector 对其 elememt 类型 T 的要求从 C++03 更改为 C++0x。T 现在不再需要是可复制构造的,但移动可构造性就足够了。

即使我们没有潜在的重新分配,T 是否也需要它?

vector<boost::scoped_ptr<int>> x(numberElements);

我认为这里没有必要搬家。规范是怎么说的?

4

1 回答 1

3

根据 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] 的深层含义。让我们让讲师逃脱:确定这一段的含义留作练习!

于 2012-10-28T18:25:40.840 回答