名前付き要件:MoveInsertable(C++11以上)
提供: cppreference.com
その型のオブジェクトが与えられたアロケータによってその型の右辺値から未初期化記憶域に構築可能であることを指定します。
[編集]要件
以下の内容を満たす場合、型 T
は T
と同一の value_type
を持つコンテナ X
に MoveInsertable です。
A | アロケータの型 |
m | A 型の左辺値 |
p | コンテナによって準備された T* 型のポインタ |
rv | T 型の右辺値式 |
が与えられたとき、以下の式が well-formed でなければなりません。 ただし X::allocator_type
は std::allocator_traits<A>::rebind_alloc<T> と同一です。
std::allocator_traits<A>::construct(m, p, rv);
また、評価の後、 *p
の値は rv
がそれまで保持していた値と同等になります (rv
は有効だけれども未規定な状態になります)。
この項は、 X
がアロケータ対応でない場合、アロケータオブジェクトを作成する必要がないことと std::allocator のユーザ定義の特殊化が実体化されないことを除いて、 A
が std::allocator<T> であるかのように定義されます。
[編集]ノート
A
が std::allocator<T> の場合、これは ::new((void*)p) T(rv) によって行われたかのように配置 new を呼びます。 これは実質的に T
がムーブ構築可能であることを要求します。
std::allocator<T> または同様のアロケータが使用される場合、クラスはこの型要件を満たすためにムーブコンストラクタを実装する必要はありません。 const T&
引数を取るコピーコンストラクタが右辺値式を束縛できます。 MoveInsertable なクラスがムーブコンストラクタを実装する場合は、構築後の rv
の値が未規定であることを活かすためにムーブセマンティクスを実装することもできます。
[編集]関連項目
CopyInsertable |