Size: a a a

2020 August 29

m

magras in pro.cxx
Anatoly Tomilov
ну тогда понятно с предыдущим
Нет. Скорее проблема в том, что непонятно что делать вектору, если при присваивании второго элемента вылетело исключение.
источник

m

magras in pro.cxx
В смысле я с ходу не вижу как это можно решить не выделяя новый кусок памяти.
источник

AT

Anatoly Tomilov in pro.cxx
следует ли из этого, что почти всегда стоит предпочитать resize, а затем std::copy в вектор? Или реализация assign для вектора элементов с noexcept copy/move конструкторами может отличаться?
источник

AT

Anatoly Tomilov in pro.cxx
кажется для вектора trivially copyable элементов ещё более оптимальной можно сделать реализацию
источник

ᅠ‌

ᅠ ‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌... in pro.cxx
Anatoly Tomilov
а вообще законно ли делать так: std::vector<int> v = {1, 2, 3}; int & one = v[0]; v.clear(); v.push_back(123); std::cout << one << std::endl;?
Нет
источник

d

d7d1cd in pro.cxx
Anatoly Tomilov
а вообще законно ли делать так: std::vector<int> v = {1, 2, 3}; int & one = v[0]; v.clear(); v.push_back(123); std::cout << one << std::endl;?
Почему так делать нельзя? Ведь, вроде бы, здесь нет перераспределения памяти...
источник

m

magras in pro.cxx
Anatoly Tomilov
следует ли из этого, что почти всегда стоит предпочитать resize, а затем std::copy в вектор? Или реализация assign для вектора элементов с noexcept copy/move конструкторами может отличаться?
источник

ПК

Побитый Кирпич... in pro.cxx
d7d1cd
Почему так делать нельзя? Ведь, вроде бы, здесь нет перераспределения памяти...
one ссылается на уничтоженный объект
источник

ПК

Побитый Кирпич... in pro.cxx
Это UB, очевидно
источник

ПК

Побитый Кирпич... in pro.cxx
Получается assign при исключении в copy конструкторе оставляет this в unspecified состоянии?
источник

ПК

Побитый Кирпич... in pro.cxx
Типа базовая а  не строгая гарантия?
источник

AT

Anatoly Tomilov in pro.cxx
Побитый Кирпич
Это UB, очевидно
Т.е. все ссылки и типизированные указатели следует удалить прежде, чем будет вызван деструктор объекта?
источник

ПК

Побитый Кирпич... in pro.cxx
Anatoly Tomilov
Т.е. все ссылки и типизированные указатели следует удалить прежде, чем будет вызван деструктор объекта?
нет, их просто нельзя разыменовывать
источник

AT

Anatoly Tomilov in pro.cxx
Если у меня есть void указатель на область памяти, то все указатели, полученные кастом в типизированный указатель во время жизни объекта, сконструированного по этому адресу, нельзя использовать, если я пересоздам объект (того же типа)?
источник

ПК

Побитый Кирпич... in pro.cxx
Anatoly Tomilov
Если у меня есть void указатель на область памяти, то все указатели, полученные кастом в типизированный указатель во время жизни объекта, сконструированного по этому адресу, нельзя использовать, если я пересоздам объект (того же типа)?
То что с ссылкой так нельзя это 100%, а вот с указателем не уверен, но подозреваю что тоже нельзя
источник

ПК

Побитый Кирпич... in pro.cxx
Мне кажется в момент взятия адреса ты привязываешься к конкретному объекту
источник

ПК

Побитый Кирпич... in pro.cxx
То есть тут тоже идёт оперирование объектами а не адресами памяти
источник

IZ

Ilia Zviagin in pro.cxx
Anatoly Tomilov
Если у меня есть void указатель на область памяти, то все указатели, полученные кастом в типизированный указатель во время жизни объекта, сконструированного по этому адресу, нельзя использовать, если я пересоздам объект (того же типа)?
Почему нельзя то?
Если там есть соответствующий объект, то можно, если нет - нельзя
источник

IZ

Ilia Zviagin in pro.cxx
Anatoly Tomilov
Если у меня есть void указатель на область памяти, то все указатели, полученные кастом в типизированный указатель во время жизни объекта, сконструированного по этому адресу, нельзя использовать, если я пересоздам объект (того же типа)?
Если пересоздашь, то там уже же другой объект будет
источник

N

Neargye in pro.cxx
Anatoly Tomilov
Если у меня есть void указатель на область памяти, то все указатели, полученные кастом в типизированный указатель во время жизни объекта, сконструированного по этому адресу, нельзя использовать, если я пересоздам объект (того же типа)?
возможно надо std::launder для надежности
источник