C++ 具名要求: MoveInsertable (C++11 起)

来自cppreference.com
< cpp‎ | named req
 
 
 

指定类型对象能以给定的分配器,从该类型右值构造到未初始化内存。

[编辑] 要求

类型 T 可移动构造 (MoveInsertable) 进入其 value_type 等同于 T 的容器 X ,若给定

A 分配器类型
m A 类型左值
p 容器所准备的 T* 类型指针
rv T 类型右值表达式

其中 X::allocator_type 等同于 std::allocator_traits<A>::rebind_alloc<T>

下列表达式为良式:

std::allocator_traits<A>::construct(m, p, rv);

而且求值后, *p 的值等价于 rv 先前保有的值( rv 保持合法,但在未指定状态)。

X 不具分配器,则项目定义为假设 Astd::allocator<T> ,除了不需要创建分配器对象,且不实例化 std::allocator 的用户定义特化。

[编辑] 注意

Astd::allocator<T> ,则这将调用布置 new ,如同用 ::new((void*)p) T(rv)

若使用 std::allocator<T> 或类似的分配器,则类不必实现移动构造函数以满足此类型要求:接收 const T& 参数的复制构造函数能绑定右值表达式。若可移动插入 (MoveInsertable) 类实现移动构造函数,则它可能亦实现移动语义以利用 rv 的值在构造后未指定的事实。

[编辑] 参阅

可复制插入 (CopyInsertable)