Size: a a a

2021 July 07

АР

Андрей Руссков... in pro.cxx
и если место куда копируется obj.field не содержит объекта, в который можно memmove'ить obj.field, то тогда UB
источник

K

Kelbon in pro.cxx
хочу перенести объект в виде сырых байтиков в другое место, где его обратно распакуют в тот же тип, например.
источник

АР

Андрей Руссков... in pro.cxx
так пытались решить проблему, которую должен решать memmove )
источник

K

Kelbon in pro.cxx
если для распаковки уже есть наконец нормальное решение bit cast, то для запаковки чет надо думать чтобы не ub было
источник

K

Kelbon in pro.cxx
и естественно placement new не работает, т.к. нужен конструктор какой то, который не обязательно есть
источник

SS

Sergey Sobolev in pro.cxx
Упаковка - это всегда долбосня с байтами, тебе еще выравнивание нужно учитывать
источник

АР

Андрей Руссков... in pro.cxx
лол я тут подумал, мб стоит сделать placement designated initializer?
источник

АР

Андрей Руссков... in pro.cxx
(стикер с Маском и косяком)
источник

K

Kelbon in pro.cxx
при том возможно я хотел бы, чтобы это вело себя как один объект, то есть не вызывался деструктор у старого объекта и прочее, думал меммув это и делает
источник

K

Kelbon in pro.cxx
биткаст как то обрабатывает эту ситуацию, когда объект 1 преобразовали в объект 2 и у обоих вызовется деструктор чтоли?
источник

BU

Boris Usievich in pro.cxx
копировать объект внутрь себя самого так себе идея, вне зависимости от того, чего вы хотите добиться
источник

K

Kelbon in pro.cxx
я не собираюсь внутрь самого себя копировать
источник

BU

Boris Usievich in pro.cxx
тогда причем тут memove? Если дипазоны не пересекаются, то memcpy ничем не хуже
источник

SS

Sergey Sobolev in pro.cxx
оперировать memcpy, memmove и деструкторами некорректно) это сишные функции, они знать не знают, что там с++ объекты прилетели к ним. Как раз вот это доплнение в с++20 про то, что начнется время жизни объекта, но и там оговорок очень много. Если у объекта есть нетривиальный деструктор, то memcpy и memmove использовать не нужно
источник

АР

Андрей Руссков... in pro.cxx
вы блин все малех путаете "объекты" в понимании pointer provenance и объекты нетривиальных типов
источник

АР

Андрей Руссков... in pro.cxx
auto i = new int; - это создает объект тривиального типа
источник

АР

Андрей Руссков... in pro.cxx
delete i; - заканчивает жизнь объекта, пусть и без деструктора
источник

АР

Андрей Руссков... in pro.cxx
int i; точно так же создает объект
источник

АР

Андрей Руссков... in pro.cxx
struct Foo {
int i, j;
};

Foo f; // тут мы создали объекты f, f.i и f.j
источник

АР

Андрей Руссков... in pro.cxx
шутки ради, там даже есть отдельное уточнение где "создается объект" вот в такой конструкции:

auto mem = malloc(sizeof(int));
auto obj = reinterpret_cast<int*>(mem);
источник