Questo è puramente ipotetico, ma non sono sicuro se il codice seguente produrrà un comportamento indefinito secondo le specifiche C++. Mi piacerebbe fare una copia dei byte in un oggetto, far saltare l'oggetto sovrascrivendolo con zeri, quindi copiare i vecchi byte indietro. Posso farlo senza causare un comportamento indefinito?Posso clonare i byte di un oggetto C++, sovrascrivere i byte originali, quindi copiare nuovamente quei byte?
codice di esempio:
NonPODType o;
char bytes[sizeof(o)];
memcpy(bytes, &o, sizeof(o));
memset(&o, 0, sizeof(o));
memcpy(&o, bytes, sizeof(o));
Non penserei che causerebbe problemi strani, ma perché lo faresti? Dalla mia comprensione, il risultato netto è pari a zero –
Interessante domanda. Se la risposta è effettivamente "No", sarebbe interessante vedere un esempio specifico che non funziona. Naturalmente, un tale esempio potrebbe non esistere nelle attuali implementazioni. –
Si interrompe definitivamente per una classe con membri volatili (poiché lo stato può cambiare tra copia e imposta). –