Size: a a a

2020 July 09

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Какое-то валидное состояние типа. Если у конкретного класса это валидное состояние называется «UB пока не настроишь во что-то адекватное» то сорян.
источник

TS

Till Schneider in pro.cxx
Побитый Кирпич
Но если
auto tmp = std::move(str);
tmp.clear();
// str.empty() == true

Тут уже есть гарантия
ну это понятно, да =)
источник

D

Danya in pro.cxx
Дмитрий ⬡ Лапшин
Какое-то валидное состояние типа. Если у конкретного класса это валидное состояние называется «UB пока не настроишь во что-то адекватное» то сорян.
Насколько я помню, там валидное состояние для деструктора только
Нет?
источник

АР

Андрей Руссков... in pro.cxx
хм кстати это интересная риторика. Что есть "valid state"? По идее, moved out объекту достаточно уметь делать одну вещь - удаляться без UB )
источник

ПК

Побитый Кирпич... in pro.cxx
Danya
Насколько я помню, там валидное состояние для деструктора только
Нет?
валидное для деструкторов только это значит невалидное)
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Побитый Кирпич
валидное для деструкторов только это значит невалидное)
Ну нет.
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Double free не будет значит, уже неплохо.
источник

ПК

Побитый Кирпич... in pro.cxx
Дмитрий ⬡ Лапшин
Double free не будет значит, уже неплохо.
Если нельзя вызвать empty(), то значит невалидное состояние
источник

D

Danya in pro.cxx
источник

D

Danya in pro.cxx
Я был не прав
источник

ПК

Побитый Кирпич... in pro.cxx
Даже pop_back можно вызвать, просто результат unspecified (в том числе UB, если this пустой)
источник

ПК

Побитый Кирпич... in pro.cxx
Поэтому не нужно хотеть этого делать)
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Побитый Кирпич
Если нельзя вызвать empty(), то значит невалидное состояние
Как по ссылке выше: стандартные классы всегда разрешают. Но если ты пишешь свои классы, то лучше бы соблюдать эту конвенцию.
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Внутренние инваиранты не сломались, но какое именно состояние — не знаешь.
источник

ПК

Побитый Кирпич... in pro.cxx
Дмитрий ⬡ Лапшин
Как по ссылке выше: стандартные классы всегда разрешают. Но если ты пишешь свои классы, то лучше бы соблюдать эту конвенцию.
Так и есть
источник

ПК

Побитый Кирпич... in pro.cxx
Дмитрий ⬡ Лапшин
Внутренние инваиранты не сломались, но какое именно состояние — не знаешь.
Но ты всегда можешь перевести в determined состояние каким нибудь методом, который не имеет preconditions на this
источник

ПК

Побитый Кирпич... in pro.cxx
Типа clear()
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Именно.
источник

ДЛ

Дмитрий ⬡ Лапшин... in pro.cxx
Или просто перезаписав значение.
источник

d

disba1ancer in pro.cxx
Дмитрий ⬡ Лапшин
Или просто перезаписав значение.
намёк на оператор присвоения?
источник