Прежде всего, это не C++. Это уродливое C. Вы вручную выделяете блок памяти размером 1024 байта, фиксируя его адрес голым указателем. Кроме того, в образце кода вы никогда не освобождаете его, утечка MB памяти. Это считается крайне плохой практикой, когда дело доходит до C++.
C++ не является C с классами, это прекрасный язык, который может выражать себя, используя его в сочетании со стандартной библиотекой и придерживаясь лучших шаблонов проектирования, которые естественным образом реализуются при программировании OO, особенно с понятиями RAII, общего инкапсуляция, которая может привести к лучшему управлению памятью. Даже new
уклоняется от необходимости, не говоря уже о malloc
.
for (int i=0; i != 8; i++)
Также вы делаете опасные предположения, что может привести к неопределенному поведению.
((char*)Buffer)[i] = ((char*)Test)[i];
Я даже не собираюсь комментировать это. Святой ... Не только это плохо, это не работает. Вы пытаетесь заставить экземпляр struct
A
, лежащий на стеке, обычный «объект»/var, в char*
. Вам не хватает &Test
.
Используйте memcpy, если вы используете этот путь, но, пожалуйста, подумайте об улучшении вашего подхода на C++. memcpy принимает три аргумента, назначение, источник и размер в байтах. Удостоверьтесь, что они совпали, и вы получите быструю копию за каждый байт.
Почему бы не использовать memcpy? –
Theres so many ifs, maybes и somtimeses ... просто используйте оператор =. Да, он побито копирует _ в ваш случай_, но что, если в структуре не было 8 байтов?/ –