Size: a a a

2021 July 06

SS

Sergey Sobolev in supapro.cxx
все равно ведь деструкторы нужно вызвать при resize() (если < size), тот же самый эффект, как и у erase получается
источник

O

Ofee in supapro.cxx
Именно, об инвалидации следующих позиций. Этого достаточно, чтобы трактовать как гарантию отсутствия инвалидации предыдущих. Возможно ли гарантировать отсутствие инвалидации при реалокации?
источник

VS

Vlad Serebrennikov in supapro.cxx
если, как вы говорите, resize() может сделать реаллокацию, то инвалидировано будет все, а не только с текущей позиции и до конца

shrink_to_fit() и тот инвалидирует все
источник

TS

Till Schneider in supapro.cxx
а если рассмотреть какую-то систему "сферический конь в вакууме", на которой возможно совершать реалокацию в меньшую сторону, просто высвобождая память неиспользуемых элементов, при этом не затрагивать ту память, которая была выделена под имеющиеся элементы?
источник

SS

Sergey Sobolev in supapro.cxx
но ведь задача стандарта как раз найти общее поведение, которое не будет противоречить большинству систем. Таким образом, даже если на описанной вами системе такое возможно, то мы все равно будем считать, что они инвалидировались, так как нам важна переносимость
источник

IZ

Ilia Zviagin in supapro.cxx
Так это на любой системе можно, вот хоть прямо на Винде. Тем более что весьма вероятно что новый кусок памяти будет другим, и старый можно будет использовать полностью
источник

VS

Vlad Serebrennikov in supapro.cxx
да, такое теоретически возможно, но я не вижу, чтобы стандарт требовал существование такого механизма от реализаций (либо я не нахожу, чтобы требовал).

зато нахожу еще одно упоминание реаллокации, которая все инвалидирует

поэтому если такая чудесная реаллокация и будет выполнена реализацией, она не будет реаллокацией в терминах стандарта, то есть не будет ничего инвалидировать
источник

VS

Vlad Serebrennikov in supapro.cxx
и еще встает вопрос, а чего это вдруг size() меняет емкость контейнера. такие случаи тоже явно прописаны в стандарте
источник

IZ

Ilia Zviagin in supapro.cxx
REsize ?
источник

O

Ofee in supapro.cxx
>> она не будет реаллокацией в терминах стандарта
Я не уверен, но означает ли инвалидация, что адреса элементов будут буквально изменены? Если нет – инвалидация у нас всё-равно случалась, хотя адреса и не изменились – для нас это ничего не значит, мы всё равно не имеем права обращаться к данным по инвалидированным указателям из-за UB. А если обратимся и обнаружим, что элемент на месте – ничего страшного, ожидаемое поведение – тоже одно из проявлений UB
источник

VS

Vlad Serebrennikov in supapro.cxx
так и size() не имеет отношения к емкости. почему resize() должен? когда есть reserve() и shrink_to_fit()
источник

IZ

Ilia Zviagin in supapro.cxx
Ну, имеет...
источник

VS

Vlad Serebrennikov in supapro.cxx
size() <= capacity() это не то, о чем мы тут говорим, как мне видится
источник

VS

Vlad Serebrennikov in supapro.cxx
я думаю, что она значит, что они могут измениться, потому что никто не требует от реализаций расширять текущий storage

если адреса не поменялись и мы пользуемся старыми указателями и ссылками, то это даже не UB благодаря transparently replaceable, если я ничего не упускаю
источник

С

Сэр MSTR in supapro.cxx
Ребят,

А можно ли задать одинаковое имя для члена класса и для входящего параметра метода этого класса? Области видимости разные же?
источник

K

Kelbon in supapro.cxx
проверить 2 секунды
источник

С

Сэр MSTR in supapro.cxx
Д я не дома, проверил бы уже ☹️
источник

K

Kelbon in supapro.cxx
в конструктор можно
источник

Б

Богдан in supapro.cxx
Да
источник

С

Сэр MSTR in supapro.cxx
Значит в метод тоже можно, благодарю, видимо нам запрещает это фреймворк
источник