Почему memcpy не гарантированно безопасен для не POD-типов?
Я прочитал об этом абзаце из нескольких вопросов, размещенных на SO.
Я не могу понять, почемуmemcpy
не гарантируется безопасность для не POD типа. Я понимаю, чтоmemcpy
это просто побитовая копия.
Ниже цитата из стандарта
Для любого объекта (кроме подобъекта базового класса)POD
типT
, содержит ли объект допустимое значение типаT
нижележащие байты (1.7), составляющие объект, могут быть скопированы в массивchar
или жеunsigned char
.41) Если содержимое массиваchar
или жеunsigned char
копируется обратно в объект, объект должен впоследствии сохранить свое первоначальное значение.
# define N sizeof (T)
char buf[N];
T obj ; // obj initialized to its original value
std :: memcpy (buf , & obj , N); // between these two calls to std::memcpy,
// obj might be modified
std :: memcpy (& obj , buf , N); // at this point, each subobject of obj of
// scalar type holds its original value