6

elememtタイプTのstd::vectorの要件が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です。コンストラクターは要件テーブルのコンストラクターの1つではないため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 に答える