Move конструктор вектора, если moved сам себя, вектор должен остаться не тронутом.
<Описание вашей идеи> https://stackoverflow.com/questions/17730689/is-a-moved-from-vector-always-empty
представим такую задаче, https://leetcode.com/problems/merge-intervals/description/
решаем их примерно так.
// ...
int n = intervals.size();
int m = 1;
for (int i= 1; i < n; i++) {
if (intervals[m-1][ 1 ] < intervals[ i ][ 0] ) {
intervals[m ++ ] = std::move(intervals[i]); // здесь если m == i , то после move, intervals[m] - становятся пустыми в GCC компиляторе, в MSVC остается не тронутом. Поэтому здесь явно нужно проверять m != i .
}
}
В С++23 стандарте этой случай указано как unspecified. Я предлагаю, для вектора при муве конструкторе/или присвоение можно указать явно, что при мувед сам себя, вектор останется не тронутом.
<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше>
Выше указал пример. Программистам не нужно явно проверять сверху два объекта, что они разные. Это случается так редко, но как будто замедлительной бомбой, вдруг случается, очень трудно ловить, почему вектор стал пустой.
Проверка два указателей - не должен быть проблемой, что бьют по производительности.
<Код c реализацией вашей идеи, если есть> https://godbolt.org/z/s8dnvsjWa
Полезные ссылки:
- https://quick-bench.com/ - онлайн бенчмарк, поможет вам продемонстрировать эффективность вашего подхода
- https://godbolt.org/ - онлайн дизассемблер
- https://eel.is/c++draft/ - черновик стандарта C++ с возможностью ссылаться на конкретные параграфы
- https://wg21.link/ - универсальная ссылка на международные proposal или баги в С++, например https://wg21.link/P1000 ссылается на документ P1000, а https://wg21.link/cwg100 на 100 баг в ядре языка