Нет, это не нужно, и это почти наверняка преждевременная оптимизация.
Вектор действительно может быть представлен 3 указателями (или двумя указателями и смещением, или одним указателем и двумя смещениями ... но это не так часто, так что для остальной части моего объяснения я представлю, что векторы представлены тремя указателями).
- Один указатель указывает на начало памяти, которой он управляет.
- Один указатель указывает на один конец элемента, который был вставлен в него.
- Один указатель указывает на конец памяти, которой он управляет.
Конструктор перемещения std::vector<int> a = std::move(b);
можно реализовать, просто взяв эти три указателя из b
, установив для них какое-либо простое в создании значение (nullptr
в качестве значения часового, означающего «Я пустой», для пример) и тогда все будет сделано.
На самом деле, именно так gcc
делает это (и большинство стандартных реализаций библиотеки ... но у меня был под рукой gcc
источник). Смотрите здесь .
Таким образом, ваш reserve
вызов в лучшем случае оптимизируется компилятором в бездействие, а в худшем случае вызывает ненужное выделение памяти. Не хорошо!