Кажется, что когда std::vector
изменяет свой размер (например, при вставке нового элемента и нехватке места), он использует конструктор копирования своих элементов, а не их конструктор перемещения, даже если они имеют оба.
- Это общее правило, или мне нужно что-то сделать, чтобы убедиться, что движущийся ctor предпочтительнее (например, пометить вещи как
noexcept
?) - Если это общее правило, то почему?
Примечания:
- Я использую GCC 5.4.1 и связанный с ним libstdС++ (но через NVCC CUDA 8.0) с
--std=c++11
. - Возможно, связанный вопрос: Векторное перераспределение использует копию вместо конструктора перемещения.