Здравствуйте, Shmj, Вы писали:
S>Ну перейти на личности легче всего.
В вашем случае -- это единственный возможный вариант. Вы засрали RSDN своей тупостью и поэтому заслуживаете того, чтобы вас в вашу же тупость макали снова и снова.
S>А конкретно — после std::move(first) вы опять пытаетесь использовать first.
И?
S>В Rust вам бы на уровне компиляции выдало ошибку
Мы сейчас C++ обсуждаем. В C++ объект после перемещения содержимого должен оставаться в некотором валидном состоянии.
Те, кто имеют мозги, могут подумать о том, что такое "валидное" состояние для контейнера после перемещения его содержимого.
Например, чем семантически вот это:
std::vector<int> a{...};
std::vector<int> b{ std::move(a) };
отличается вот от этого:
std::vector<int> a{...};
std::vector<int> b;
b.reserve(a.size());
std::move(a.begin(), a.end(), std::back_inserter(b));
a.clear();
a.shrink_to_fit();
?
Даже если вы сочли, что два этих фрагмента ну вот вообще ни капли не эквивалентны, то зачем делать так, что попытка pushBack-а в опустошенный контейнер ведет к порче памяти, а не к выбросу исключения или, хотя бы, игнору переданного значения? Потому что ChatGPT этого вам не подсказал?
Ну или взгляд с другой стороны: у вас pushBack написан так, что если в контейнере места для нового элемента нет, то вызывается resize. И если resize завершился нормально, значит выполнено условие что в хранилище достаточно места для нового элемента. Т.е. успешный resize реализует инвариант (_capacity > _size). Но после перемещения содержимого этот инвариант перестает выполняться. Схерали?
S>в C++ ошибку на уровне компиляции не выдаст, но все знают что так делать нельзя.
Все в вашем случае -- это вы и ChatGPT?