Re[11]: Староверы не хотят переходить на Rust...
От: so5team https://stiffstream.com
Дата: 17.09.24 08:02
Оценка: +1
Здравствуйте, 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?
Re[12]: Староверы не хотят переходить на Rust...
От: Shmj Ниоткуда  
Дата: 17.09.24 09:41
Оценка:
Здравствуйте, so5team, Вы писали:

S>Мы сейчас C++ обсуждаем. В C++ объект после перемещения содержимого должен оставаться в некотором валидном состоянии.


Ну не знаю, пишут "валидном но неопределенном" — что весьма обтекаемо. Я всегда относился к перемещенным объектам по принципу Rust — переместили и забыли, нечего труп ворошить.

Но ладно, правда ваша — вынужден со скрипом признать — ноль там все-таки не валидное состояние.
Re[11]: Староверы не хотят переходить на Rust...
От: пффф  
Дата: 17.09.24 11:03
Оценка:
Здравствуйте, Privalov, Вы писали:

П>>Наверное, всё можно было бы сделать в несколько раз проще. И скорее всего, ООП там тоже был, только свой, костыльный, как у vsb


P>Основной проект был на Java. В принципе, ООП, только наследования реализации было слишком до хрена и часто не по делу.

P>Коллега делал какую-то утилиту или дополнение, уже не помню. И что-то ему понадобилось от Винды. А Java сама не могла. Коллега спросил меня, я был немного в курсе, ну и сделал JNI. Десятки строк на голых Сях, ничего особенного. Лепить классы, заворачивать их в функции было бы слишком.

Ну на таких масштабах да, можно и сишечкой перетоптаться
Re[5]: Староверы не хотят переходить на Rust...
От: zx zpectrum  
Дата: 22.09.24 16:33
Оценка:
КБ>Самое главное не рассказали. Выходы за пределы массива были? Обращения к освобожденной памяти?
Не той важности был проектик, чтобы этими вопросами заморачиваться.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.