Esto es puramente hipotético, pero no estoy seguro de si el siguiente código dará como resultado un comportamiento indefinido según las especificaciones de C++. Me gustaría hacer una copia de los bytes en un objeto, arruinar el objeto sobreescribiéndolo con ceros, y luego copiar los viejos bytes. ¿Puedo hacerlo sin causar un comportamiento indefinido?¿Puedo clonar los bytes de un objeto C++, sobrescribir los bytes originales y luego copiar esos bytes?
Código de ejemplo:
NonPODType o;
char bytes[sizeof(o)];
memcpy(bytes, &o, sizeof(o));
memset(&o, 0, sizeof(o));
memcpy(&o, bytes, sizeof(o));
No creo que cause ningún problema extraño, pero ¿por qué harías eso? Desde mi entendimiento, el resultado neto es cero cambio –
pregunta interesante. Si la respuesta es "No", sería interesante ver un ejemplo específico que no funciona. Por supuesto, tal ejemplo podría no existir en las implementaciones actuales. –
Definitivamente se rompe para una clase con miembros volátiles (ya que el estado puede cambiar entre copiar y establecer). –