Size: a a a

2020 August 24

D

Danya in supapro.cxx
Имелось в виду, что оно работает для тривиальных типов
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
foo* ub = (foo*)malloc(sizeof(foo));
ub->bar();
Ясно. Т.е. конструктор может не выполниться, например:
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Ясно. Т.е. конструктор может не выполниться, например:
он итак не выполнится
источник

ПК

Побитый Кирпич... in supapro.cxx
но дело не столько в этом, просто lifetime не начался
источник

ПК

Побитый Кирпич... in supapro.cxx
Даже для int-а
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
он итак не выполнится
А, ну да, логично.
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
Даже для int-а
А чем это грозит для int'а? :)
источник

ПК

Побитый Кирпич... in supapro.cxx
То есть уже это UB формально:
int a = *(int*)malloc(sizeof(int));
источник

o

osm1um in supapro.cxx
Побитый Кирпич
То есть уже это UB формально:
int a = *(int*)malloc(sizeof(int));
Потерял 4 байта!!
источник

o

osm1um in supapro.cxx
Аааа!!! Полундра!
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
А, ну то есть память может не выделиться, тупо deadcode?
источник

o

osm1um in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
А, ну то есть память может не выделиться, тупо deadcode?
Обычно malloc гарантирует выделение. Тоесть будет стоять тред, пока системе не выделит память.
источник

o

osm1um in supapro.cxx
*вроде*
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
А, ну то есть память может не выделиться, тупо deadcode?
нет, просто UB, потому что объекта под указателем не существует
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
То есть уже это UB формально:
int a = *(int*)malloc(sizeof(int));
А почему это UB, если это только для нетривиальных типов?
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
А почему это UB, если это только для нетривиальных типов?
Это UB для всех типов until C++20
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
нет, просто UB, потому что объекта под указателем не существует
Почему не существует, если под него выделили память?
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Почему не существует, если под него выделили память?
потому что выделение памяти != создание объекта
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
А какой тогда вообще толк от malloc?
источник

ПК

Побитый Кирпич... in supapro.cxx
Создание объекта это вызов конструктора, например placement new
источник