【发布时间】:2013-04-22 07:36:32
【问题描述】:
为什么使用自定义分配器移动std::vector 的构造函数不会从分配器的行为中推断出noexcept()?
这导致封装此类向量的类无法形成某些<algorithm>s中可以正常移动的(其他)向量。即使底层类型满足必要的要求(MoveInsertable 和 DefaultInsertable)。
【问题讨论】:
-
因为可能会有人从移动构造函数中抛出
-
你能提供一些代码吗?我不明白你的意思。
noexcept关于“分配器的行为”是什么? -
说,“分配器的行为”是指
noexcept(allocator::construct(...))和noexcept(allocator::destroy(...))上的一些布尔表达式。 -
@BЈовић 但是在没有替代分配器的情况下移动向量的构造函数有
noexcept。 -
和移动赋值运算符有
vector&operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move())形式
标签: c++ c++11 g++ move-semantics